PHP Session入門教學

2020-07-16 10:05:13
Session 儲存在伺服器端,本質上和 Cookie 沒有區別,都是針對 HTTP 協定的局限性而提出的一種保持用戶端和伺服器端間對談狀態的機制。

Session 經常用來在網站的上下文間實現頁面變數的傳遞、使用者身份認證、程式狀態記錄等,常見的有配合 Cookie 使用、實現儲存使用者的登入狀態或者記錄使用者的購物下單資訊等。

在使用 Session 之前必須先開啟 Session,可使用 session_start() 開啟 Session,同 Cookie 一樣,在開始之前不能有任何輸出內容,否則會出現如下警告:

Warning: session_start(): Cannot send session cookie - headers already sent

也可以修改 php.ini 中的session.auto_start=0session.auto_start=1,設定自動開啟 Session 支援,這樣就不必每次在使用 Session 的時候都加上 session_start() 了。

Session 的設定非常簡單,可以直接使用以下形式:

$_SESSION[key]=value

其中 key 表示 Session 的鍵,所有設定的 Session 都儲存在全域性陣列 $_SESSION 中。

當在程式碼中設定了 Session 時,在 HTTP 請求的訊息頭中會攜帶一個名為 PHPSESSID 的 Cookie,其值是一個 32 位十六進位制的字串。每個用戶端向伺服器請求時都會產生一個不同的值,如果清除瀏覽器的 Cookie,再次重新整理頁面時將會重新設定一個 PHPSESSID 的值。

伺服器端接收到這個 Cookie,根據其值在伺服器中找到對應的 Session 檔案,從而實現保持與用戶端連結狀態的資訊,其中 Session 中儲存著序列化的 Session 鍵值等資訊。

設定了 Session 的 HTTP 請求訊息頭如下:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:PHPSESSID=4680c9df2ce9ac4d1aa7f366bd92d83a
Host:localhost
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36


如果讀者想深入學習 Session,可以繼續閱讀:
  • PHP Session的工作原理和儲存機制
  • PHP使用Redis儲存Session