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檔案.
相關文章
- Session的過期問題Session
- php關於session的問題PHPSession
- Express專案中ajax請求session過期問題處理ExpressSession
- 通過配置檔案來修改WAS控制檯Session過期時間的方法Session
- 關於 session 未到設定的過期時間就過期的問題(分享坑點)Session
- session的存取問題Session
- 理解Cookie和Session機制,及其安全問題CookieSession
- 關於session的問題Session
- Hibernate的session問題Session
- PHP Session可能會引起併發問題PHPSession
- PHP Session的用法PHPSession
- PHP session的使用PHPSession
- session共享問題???Session
- hibernate中的no session問題Session
- Session互不干擾的問題。Session
- Struts Tiles 和 session的問題Session
- 關於session的奇怪問題Session
- Session過期,跳出iframe等框架Session框架
- laravel session 與 php session配置LaravelSessionPHP
- PHP 的 SESSION 機制PHPSession
- 關於session leak的問題分析Session
- 關於session的銷燬的問題Session
- 淺談session及其安全Session
- MySQL的session過程MySqlSession
- 求教 一個java取php session的問題 急 請板橋里人指教~~~JavaPHPSession
- Hibernate中的Session快取問題Session快取
- session跟蹤失效的問題和原因Session
- open session in view引起的事務問題SessionView
- 關於filter獲取session的問題!!!FilterSession
- struts下session.setAttribute();的問題Session
- 通過shell指令碼快速定位active session問題指令碼Session
- 記錄springboot專案裡關於session的一個問題(session監聽器失效)Spring BootSession
- Web--Session共享問題WebSession
- Tomcat 共享session問題TomcatSession
- kill session的學問Session
- 記錄我的Express-session每次請求都重新生成session的問題ExpressSession
- session過期,如何主動的更新客戶端的頁面Session客戶端
- PHP中Session和Cookie的探究PHPSessionCookie