PHP的session,session檔案,及其過期的問題
session作為一種高階點的cookie,本地瀏覽器本地檢視也和cookie差不多,不同的是過期屬性的內容是session.
因為在網路傳輸時只會傳輸一個session id,所以有更好的安全性,也因為這些資料託管於伺服器,所以對伺服器效能有影響.
先看session常用用法.
session_start(); 建立,使用一個session.和前面的cookie,header一樣,該函式會向瀏覽器傳送一個cookie,所以該函式必須在該頁面向瀏覽器傳送任何資料之前呼叫.除非你在最前面已經把快取鎖住:ob_start();
session_name('sessionname'); 修改預設的session的名字.該名字可以在php.ini裡的session.name = PHPSESSID裡設定.瀏覽器檢視cookie時會看到這個名字.該函式需要在session_start之前呼叫.
建立,訪問和刪除session和普通陣列一樣. 下面會有程式碼展示.
session_destory() 手動刪除session檔案.下面會將到session檔案,過期,和垃圾回收的問題.
session_id() 獲取session id.
session_start();
if (isset($_SESSION['time']))
{
echo session_id();
echo "< br/>";
echo $_SESSION['time'];
}
else
{
$_SESSION['time'] = date("Y-m-d H:i:s");
}
session_start();//繼續操作session unset($_SESSION['time']); // 刪除session裡的time的資料. $_SESSION = array();// 刪除session裡所有的資料 session_destory();// 刪除和該session相關的一切資料,包括session檔案.但不會清理全域性變數裡的資料,如$_SESSION.以及$_COOKIE['PHPSESSID']. 刪除瀏覽器的PHPSESSID仍需setcookie().
所以如果要完整的清理一個使用者的session 至少需要2步.置NULL,destory.
php session檔案位置為php.ini裡的session.save_path的值.預設是一個系統的臨時目錄裡. 還有個經常配置的引數session.cookie_lifetime.session的有效時間.預設是0,表示直到瀏覽器重啟.
和session檔案有關的配置有
session.gc_probability = 1 session.gc_divisor = 1000
上面2個引數的組合 probabilty 除於 divisor 的結果為php的gc(垃圾回收)程式啟動的概率.這裡的概率就是千分之一了.還要注意的是gc程式是依賴web請求來觸發啟動的.如果頁面一個月沒人訪問,那一個月也不會來概率一次.
session.gc_maxlifetime = 1440
session檔案的有效期.預設是1440秒,24分鐘了。 每次重新整理頁面,即session操作後,session檔案的的修改時間則會更新.所以一個合理的gc_maxlifetime會保證瀏覽器的會話狀態一直有效.不會被刪除.
而session.cookie_lifetime則是個更總括的控制.即gc_maxlifetime沒到,但cookie_lifetime到了,會話就會變成無效.
所以合適的gc_maxlifetime可以讓使用者不用重新整理頁面也不會被提示登出了.又如涉及機密的頁面maxlifetime可以設定小點.或者設定cookie_lifetime.
<?php
ini_set("session.gc_divisor", 1);
ini_set("session.gc_maxlifetime", 30);
ini_set("session.cookie_lifetime", 60);
session_start();
if (isset($_SESSION['time']))
{
echo session_id();
echo "< br/>".$_SESSION['time'];
echo "< br/>".$_COOKIE['PHPSESSID'];
}
else
{
$_SESSION['time'] = date("Y-m-d H:i:s");
}
echo "< br/>".ini_get("session.gc_maxlifetime");
echo "< br/>".ini_get("session.cookie_lifetime");
?>
該程式碼可以用來觀察生成的session檔案.
相關文章
- Express專案中ajax請求session過期問題處理ExpressSession
- 關於 session 未到設定的過期時間就過期的問題(分享坑點)Session
- 理解Cookie和Session機制,及其安全問題CookieSession
- hibernate中的no session問題Session
- PHP Session的用法PHPSession
- 關於 PHP Session ID 改變的問題解決PHPSession
- session共享問題???Session
- laravel session 與 php session配置LaravelSessionPHP
- PHP 的 SESSION 機制PHPSession
- 記錄springboot專案裡關於session的一個問題(session監聽器失效)Spring BootSession
- MySQL的session過程MySqlSession
- 淺談session及其安全Session
- 如何運用PHP+REDIS解決負載均衡後的session共享問題PHPRedis負載Session
- 禁用 COOKIE 後如何訪問 SESSION 問題CookieSession
- [20220531]驗證inactive session出現的問題.txtSession
- 如何設定一個嚴格30分鐘過期的SessionSession
- PHP flock 檔案鎖的使用問題PHP
- 6.7 版本 Cookie 跟 Session 存入問題CookieSession
- Session一致性問題Session
- PHP 不得不提的 session 與 cookiePHPSessionCookie
- tomcat 設定session過期時間(四種方式)TomcatSession
- 分享一個session過期後根據guard跳轉的實現Session
- Cloud Foundry Session Affinity(Sticky Session)的實現CloudSession
- SpringBoot 2.0 SpringSession 支援跨域session問題Spring BootGseSession跨域
- 日常問題 頁面跳轉 $_SESSION 失效Session
- vue 解決不能攜帶session問題VueSession
- Spring Boot前後端分離專案Session問題解決Spring Boot後端Session
- WebApi和Mvc的Session一直獲取不到問題WebAPIMVCSession
- [20180918]disconnect session和kill session的區別.txtSession
- Nginx session丟失問題處理解決方法NginxSession
- Spring Session+Spring Data Redis 解決分散式系統架構中 Session 共享問題SpringSessionRedis分散式架構
- keycloak~關於session idle和session max的解釋Session
- 解決requests庫中session.verify引數失效的問題Session
- 使用requests庫解決Session物件設定超時的問題Session物件
- session和v$session說明Session
- Go實戰專案-Beego的Session、日誌檔案的使用和redis的選擇使用GoSessionRedis
- 使用 session 訪問計數Session
- SessionSession
- PHP透過session判斷防止表單重複提交例項PHPSession