CI中session的過期時間
最近發現專案中有些頁面重新整理後會更新session過期時間,有些則不會,很是詭異。
我的理解是,使用者每次請求頁面時,都應該重置session過期時間=time() + session life time, 但是CI並不是這樣做。
先說下對CI session的理解,以下是CI session的配置項:
引數 | 預設值 | 選項 | 描述 |
---|---|---|---|
sess_driver | files | files/database/redis/memcached/custom | 使用的儲存 session 的驅動 |
sess_cookie_name | ci_session | [A-Za-z_-] characters only | session cookie 的名稱 |
sess_expiration | 7200 (2 hours) | Time in seconds (integer) | 你希望 session 持續的秒數 如果你希望 session 不過期(直到瀏覽器關閉),將其設定為 0 |
sess_save_path | NULL | None | 指定儲存位置,取決於使用的儲存 session 的驅動 |
sess_match_ip | FALSE | TRUE/FALSE (boolean) | 讀取 session cookie 時,是否驗證使用者的 IP 地址 注意有些 ISP 會動態的修改 IP ,所以如果你想要一個不過期的 session,將其設定為 FALSE |
sess_time_to_update | 300 | Time in seconds (integer) | 該選項用於控制過多久將重新生成一個新 session ID 設定為 0 將禁用 session ID 的重新生成 |
sess_regenerate_destroy | FALSE | TRUE/FALSE (boolean) | 當自動重新生成 session ID 時,是否銷燬老的 session ID 對應的資料 如果設定為 FALSE ,資料之後將自動被垃圾回收器刪除 |
後來對比了一下重新整理頁面更新session過期時間的頁面 和 不更新session過期時間的頁面,發現更新session過期時間的頁面不僅發起get頁面的請求,還發送了另一個ajax請求。system/libraries/Session/Session.php有一段程式碼:
session_start();
// Is session ID auto-regeneration configured? (ignoring ajax requests)
if ((empty($_SERVER['HTTP_X_REQUESTED_WITH']) OR strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest')
&& ($regenerate_time = config_item('sess_time_to_update')) > 0
)
{
if ( ! isset($_SESSION['__ci_last_regenerate']))
{
$_SESSION['__ci_last_regenerate'] = time();
}
elseif ($_SESSION['__ci_last_regenerate'] < (time() - $regenerate_time))
{
$this->sess_regenerate((bool) config_item('sess_regenerate_destroy'));
}
}
// Another work-around ... PHP doesn't seem to send the session cookie
// unless it is being currently created or regenerated
elseif (isset($_COOKIE[$this->_config['cookie_name']]) && $_COOKIE[$this->_config['cookie_name']] === session_id())
{
setcookie(
$this->_config['cookie_name'],
session_id(),
(empty($this->_config['cookie_lifetime']) ? 0 : time() + $this->_config['cookie_lifetime']),
$this->_config['cookie_path'],
$this->_config['cookie_domain'],
$this->_config['cookie_secure'],
TRUE
);
}
可以看到,對於非ajax,且session未過期的請求,是不會更新session過期時間的,只會更新 __ci_last_regenerate(如果session用檔案儲存,這個值會儲存在session檔案中),用於更新sessionid.
而對於未過期session的ajax請求,每次都會根據當前時間更新session的過期時間 。
這才導致了重新整理頁面時不更新session過期時間。很奇怪為什麼CI要這麼做。
相關推薦
如何嚴格設置php中session過期時間
基本原理 默認 方法 path bag 當前時間 並不會 itl ring 如何嚴格限制session在30分鐘後過期!1.設置客戶端cookie的lifetime為30分鐘;2.設置session的最大存活周期也為30分鐘;3.為每個session值加入時間戳,然後在程序
thinkphp中session過期時間的配置
thinkphpsession過期週期是無效的 現在修改一下 一、修改tp的公共檔案 Thinkphp/Common/functions.php 將 if(isset($name['expire'])) ini_set('session.gc_maxlif
【l轉】php中session過期時間設定及回收機制詳解
php中session過期時間設定及回收機制詳解: 修改php中的session過期時間可以修改php配置檔案php.ini中的session.gc_maxlifetime即可。 當php每發出一次請求時,會有1/100的概率(預設值)觸發"session回收"。如果"session回收"發生,那就會檢查
為什麼一段時間後網站後臺自動退出 php中session過期時間設定
修改php配置檔案中的session.gc_maxlifetime。如果想了解更多session回收機制,繼續閱讀。(本文環境php5.2) 概述:每一次php請求,會有1/100的概率(預設值)觸發“session回收”。如果“session回收”發生,那就會檢查/t
php中session過期時間設定
網上很多人給出瞭解答:修改配置檔案中的session.gc_maxlifetime。如果想了解更多session回收機制,繼續閱讀。(本文環境php5.2) 概述:每一次php請求,會有1/100的概率(預設值)觸發“session回收”。如果“session回收”發生,那就會檢查/tmp/sess_*的檔
CI中session的過期時間
最近發現專案中有些頁面重新整理後會更新session過期時間,有些則不會,很是詭異。 我的理解是,使用者每次請求頁面時,都應該重置session過期時間=time() + session life time, 但是CI並不是這樣做。 先說下對CI session的理解,以下
設定Django 中的session過期時間的方法
request.session.set_expiry(value) 你可以傳遞四種不同的值給它: * 如果value是個整數,session會在些秒數後失效(適用於整個Django框架,即這個數值時效時整個頁面都會session失效)。 * 如果value是個data
ASP中如何延長session過期時間
登陸頁內寫如下語句: if 登陸成功 then session("userid")=rs("id") session.timeout=1000 end if 在需要的地方判斷 if session("userid")="" then resposne.w
在web.config和IIS中設定Session過期時間
有時候在web.config設定sessionState 或者類檔案裡設定Session.Timeout,在IIS裡訪問時每次都是達不到時間就超時,原因是因為在IIS中設定了Session的超時時間,IIS裡設定Session方法為: 在IIS裡面右鍵點選預設網站->主
Java中設定Session過期時間(Spring Boot)
開發十年,就只剩下這套架構體系了! >>>
YII2 設置session過期時間
iss cookie style use 沒有 var nts session itl 設置session過期時間 如何在YII裏設置SESSION過期時間,而不需要在php.ini裏面設置。 在protected/config/main.php裏,設置: 代碼如下
PHP如何嚴格控制session過期時間
解決 請求 tro href 客戶端 manual 優惠劵 article 添加 第一種回答 那麽, 最常見的一種回答是: 設置Session的過期時間, 也就是session.gc_maxlifetime, 這種回答是不正確的, 原因如下: 1. 首先, 這個PHP是用一
【後端-session-過期時間】
程式中session都有一個預設的過期時間,其中tomcat中的預設時間為30分鐘,根據需要我們可以去手動設定session的過期時間,以下是設定session的過期時間的三個方法: 1.在tomcat-->conf-->conf/web.xm中的<session-config&
session過期時間的設定
這裡說說session過期時間的設定,一般來說方法有四種: 1. 在 tomcat——>conf——>servler.xml檔案中定義: <Context path="/test" docBase="/test" defaultSessionTimeOut
php-session過期時間設定(設定免登陸過期時間)
今天用tp框架做一個登陸介面的時候,對於session的過期時間這個問題表費解,例如如何設定一個準確的session過期時間。 通過自己看tp的官方文件,裡面只提到了兩個,但是這兩個一個是session.gc_maxlifetime ,一個是cookie.session_lifetime。但是
Shiro中Session過期頁面跳轉回登入頁面處理問題
package xxxxxx.core.shiro.filter;import java.io.IOException;import java.io.PrintWriter;import java.util.Map;import javax.servlet.ServletRequest;import java
spring boot實戰之shiro session過期時間
在spring boot內,設定session過期時間只需在application.properties內新增server.session.timeout配置即可。在整合shiro時發現,server.session.timeout設定為7200,但未到2小時就
django 設定session過期時間
session的超時時間設定settings中SESSION_COOKIE_AGE=60*30 30分鐘。SESSION_EXPIRE_AT_BROWSER_CLOSE False:會話cookie可以在使用者瀏覽器中保持有效期。True:關閉瀏覽器,則Cookie失效。S
為什麼要設定session過期時間
1)節省伺服器資源:使用者可能已經關閉了瀏覽器,而沒有通過“登出”按鈕,這就導致服 務器不知道使用者已經不再使用系統了,這時候如果此使用者的相關session仍然存在,就沒有必要了。所以需要設定過期時間 2)安全:使用者長時間未操作,可能已經離開電腦做別的去了,這時候如
php session過期時間設定,純新手教學
t.php 操作方法:首先開啟t.php,然後開啟t2.php,不停地重新整理t2.php,就會不停的輸出username的值。而如果5秒之內不重新整理t2.php,就會發現,儲存的session值為空了 <?php function setSession