在PHP中會話處理是一個很重要的概念,它允許用戶資訊在網站或應用程式的所有頁面上保持不變,下面本篇文章就來帶大家學習一下PHP中會話處理的基礎知識,希望對大家有所幫助,
PHP中什么是會話(session)?
會話(session)是一種在不同網頁上保留資訊的機制,用于在用戶瀏覽網站或應用時識別用戶,
大家一定會有這樣一個疑問:為什么網站需要會話?討論這個問題前,我們需要回過頭來看看HTTP協議是如何作業的,
HTTP協議是無狀態協議,這意味著服務器無法在多個請求之間記住特定用戶,例如,當您訪問網頁時,服務器只負責提供所請求頁面的內容,因此,當您訪問同一網站的其他頁面時,Web服務器會分別解釋每個請求,就好像它們彼此無關,服務器無法知道每個請求都來自同一個用戶,
下圖簡要描述了HTTP協議,

在這個程序中,如果想要顯示特定用戶的資訊,則必須在每個請求中對用戶進行身份驗證,想象一下如果每次發出請求時,都需要進行在頁面上輸入用戶名和密碼進行身份驗證;這樣實在太繁瑣了,根本不實用,而,會話(session)在這個時間就派上用場了,
會話(session)允許用戶跨單個站點或應用程式的不同頁面共享資訊, 因此它有助于維護狀態,這使服務器知道所有請求都來自同一用戶,從而允許站點顯示用戶特定的資訊和首選項,
下圖描述了HTTP協議如何與會話一起使用,

PHP如何進行會話處理?
1、啟動會話
每當想要處理會話變數時,就需要確保會話已經啟動,有幾種方法可以在PHP中啟動會話,
1)、使用session_start函式
這是最常見到的方法,其中會話由session_start函式啟動,

重要的是,session_start在將任何輸出發送到瀏覽器之前,必須在腳本的開頭呼叫該函式,否則,你會遇到臭名昭著的Headers are already sent錯誤,
2)、自動啟動會話
如果需要在整個應用程式中使用會話,還可以選擇自動啟動會話而不使用session_start函式,
php.ini檔案中有一個配置選項session.auto_start,允許我們為每個請求自動啟動會話,默認情況下,它設定為0,我們可以將其設定1為啟用自動啟動功能,

2、獲取會話ID
服務器為每個新會話創建一個唯一的id,如果要獲取會話ID,可以使用該session_id功能,如以下代碼段所示,

這應該給你當前的會話ID,該session_id函式很有趣,因為它也可以使用一個引數 - 一個會話ID,如果要將系統生成的會話ID替換為您自己的會話ID,可以將其提供給session_id函式的第一個引數,

重要的是要注意,當您想要使用自定義會話ID啟動會話時,必須將session_id函式放在session_start之前呼叫,
3、創建會話變數
一旦啟動會話,$_SESSION就會使用相應的會話資訊初始化超全域陣列,默認情況下,它使用空白陣列初始化,您可以使用鍵值對存盤更多資訊,
下面我們通過代碼示例來看看如何初始化會話變數,

如上所示,我們使用session_start函式在腳本開頭啟動了一個會話;之后,初始化了幾個會話變數;最后,我們使用$_SESSION超全域訪問了這些變數,
使用$_SESSION超全域將資料存盤在會話中時,它最終存盤在會話啟動時創建的服務器上的相應會話檔案中,通過這種方式,會話資料在多個請求之間共享,
正如我們所討論的,會話資訊在請求之間共享,因此在一個頁面上初始化的會話變數也可以從其他頁面訪問,直到會話到期為止,通常,會話在瀏覽器關閉時到期,
4、修改和洗掉會話變數
我們可以像修改常規PHP變數一樣修改或洗掉先前在應用程式中創建的會話變數,
下面通過示例來看看如何修改會話變數,

在上面的腳本中,我們首先檢查了是否設定了$_session['count']變數,如果沒有設定,我們將設定為1,否則我們將增加1,因此,如果多次重繪此頁,可以看到計數器每次遞增一個!
另一方面,如果想要洗掉會話變數,可以使用unset函式,如下面的代碼段所示:

這樣,我們就無法再訪問$_SESSION[‘logged_in_user_id’]變數了,因為它已被unset函式洗掉,
5、銷毀會話
在上面我們知道可以使用unset函式來洗掉特定的會話變數;那么如果要一次洗掉所有與會話相關的資料,我們要怎么辦?
其實很簡單,我們可以使用session_destroy函式,
下面我們來看看session_destroy函式是如何作業的,

說明:session_destroy函式洗掉存盤在當前會話中的所有內容,因此,當存盤在磁盤上的會話資料被session_destroy函式洗掉時,我們將從后續請求中看到一個空的會話變數,
注:通常,在用戶注銷時才會使用session_destroy函式
有需要學習交流的友人請加入交流群的咱們一起,群內都是1-7年的開發者,希望可以一起交流,探討PHP,swoole這塊的技術 或者有其他問題 也可以問,獲取swoole或者php進階相關資料私聊管理即可
別忘了點贊哦,定期分享干貨
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/88076.html
標籤:PHP
上一篇:PHP 跨域之header
