PHP Session的用法

安全劍客發表於2020-05-26
在 PHP 中,Session 是一種伺服器端的機制,伺服器使用一種雜湊表的結構(類似於 JSON)來儲存資訊。相比於儲存在客戶端的 Cookie,Session 將使用者互動資訊儲存在了伺服器端,使得同一個客戶端每次和服務端互動時,不需要每次都傳回所有的 Cookie 值,而是隻需要傳回一個 ID 即可,這個 ID 是客戶端第一次訪問伺服器的時候生成的,而且是唯一的。

還有一點就是,因為 Cookie 儲存在客戶端,所以使用者有權禁用 Cookie,而 Session 是儲存在伺服器端的,使用者無法禁用。

Session 簡介

Session 在 Web 技術中佔有非常重要的地位。由於網頁是一種無狀態的連線程式,無法記錄使用者的瀏覽狀態,所以需要透過 Session 來記錄使用者的有關資訊,以供使用者再次以這個身份對 Web 伺服器發起請求。

Session 中文是“會話”的意思,與 Cookie 類似,都是用來儲存使用者相關資料的,比如使用者名稱、訪問許可權、登陸時間等。與 Cookie 最大不同之處在於 Cookie 是將資料存放於客戶端電腦之中,而 Session 則是將資料存放於伺服器系統之下。

當開啟一個 Session 時,PHP 將會建立一個隨機的 Session ID(例如“t5is1r7ct740dn390kuv3mpcse”),每個使用者的 Session ID 都是唯一的,而且 Session ID 與伺服器上儲存該使用者 Session 資料的文字檔名稱相同。

Session ID 會分別儲存在客戶端和伺服器端兩個位置。

客戶端,使用臨時的 Cookie 儲存在瀏覽器指定目錄中,Cookie 名稱預設為“PHPSESSID”;

伺服器端,以文字檔案形式儲存在指定的 Session 目錄中。

預設情況下,這個 Session ID 將作為一個 Cookie 傳送給 Web 瀏覽器,接下來 PHP 頁面將使用這個 Cookie 來訪問 Session 的資訊。

與 Cookie 相比,Session 擁有以下的優勢:

通常情況下 Session 更加安全,因為 Session 中的資料不會在客戶端和伺服器端來回重複傳遞;

Session 能夠儲存比 Cookie 更多的資訊;

在使用者禁用 Cookie 的情況下,使用一些方法任然能保持 Session 正常工作。

Session 的工作原理

我們可以使用 PHP  建立和儲存 Session 中的資料。在建立一個 Session 後,所有 Session 變數在使用者一次會話期間裡訪問的所有頁面都有效。其工作機制如下圖所示。

PHP Session的用法PHP Session的用法

Session 的儲存方式

Session 預設會以文字的形式儲存在伺服器的臨時目錄中,檔名以“sess_”作為字首,後面加上“Session ID”,例如“sess_t5is1r7ct740dn390kuv3mpcse”。

我們可以在 php.ini 中找到 Session 的相關配置,下面是一些常用的配置資訊:

session.save_handler = files                  #session 的儲存方式,預設是檔案,還可以是 redis 或者是 memcache
session.save_path = "d:/wamp/tmp"    #session 檔案的儲存目錄
session.use_cookies = 1                        #是否使用 cookie 儲存 session_id
session.name = PHPSESSID                  #客戶端儲存 session_id 的會話名
session.auto_start = 0                           #是否自動開啟 session
session.cookie_lifetime = 0                   #設定客戶端中儲存的 session_id 的過期時間,以秒為單位
session.use_only_cookies=0                 #是否只使用 cookie 來處理 session_id
session.gc_divisor = 1000                     #程式比率
session.gc_probability = 1                    #垃圾回收的處理機率
session.gc_maxlifetime = 1440             #設定 session 檔案的過期時間
Session 的生命週期

Session 在以下情況會被刪除,也就是失效:

Session 超時,超時指的是連續一定時間伺服器沒有收到該 Session 所對應客戶端的請求,並且這個時間超過了伺服器設定的 Session 超時的最大時間;

程式呼叫方法主動銷燬 Session;

伺服器關閉或服務停止。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2694509/,如需轉載,請註明出處,否則將追究法律責任。

相關文章