因爲 HTTP 無狀態的特色,服務端是不會記住客戶端的,對服務端來講,每個請求都是全新的。
Session 和 Cookie 都是是因爲 HTTP 無狀態的特色而產生的技術,也被用於保存訪問者的身份標示和一些數據。
能夠說,Session 和 Cookie 作着類似的事情,只是 Session 是將數據保存在服務端,經過客戶端提交來的 session_id 來獲取對應的數據;而 Cookie 是將數據保存在客戶端,每次發起請求時將數據加到 HTTP header 中提交給服務端的。
session_id 能夠經過 URL 或 cookie 來傳遞,因爲 URL 的方式比 cookie 的方式更加不安全且使用不方便,因此通常是採用 cookie 來傳遞 session_id。
服務端生成 session_id,經過 HTTP 報文發送給客戶端(好比瀏覽器),客戶端收到後按指示建立保存着 session_id 的 cookie。cookie 是以 key/value 形式保存的,看上去大概就這個樣子的:PHPSESSID=e4tqo2ajfbqqia9prm8t83b1f2。在 PHP 中,保存 session_id 的 cookie 名稱默認叫做 PHPSESSID,這個名稱能夠經過 php.ini 中 session.name 來修改,也能夠經過函數 session_name() 來修改。php
session.cookie_lifetime 以秒數指定了發送到瀏覽器的 cookie 的生命週期。值爲 0 表示"直到關閉瀏覽器"。默認爲 0。
session.gc_probability 與 session.gc_divisor 合起來用來管理 gc(garbage collection 垃圾回收)進程啓動的機率。此機率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味着在每一個請求中有 1% 的機率啓動 gc 進程。session.gc_probability 默認爲 1,session.gc_divisor 默認爲 100。瀏覽器
要精確的設置session的過時時間爲30分鐘,須要作到三點:
1.設置session的過時時間爲30分鐘
2.設置cookie的過時時間爲30分鐘
3.在session中加入time stamp,每次使用session前都檢查timestamp是否過時安全