PHP Session的用法

在 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;

服務器關閉或服務停止。

本文地址:https://www.linuxprobe.com/php-session.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章