停留N分鐘,重新整理PHPSESSID變了,登陸的使用者也就自然退出了
現在問題是找不到導致PHPSESSID變的原因
session.cookie_lifetime = 0
ps:
ini_set('session.use_cookies', 1);//使用COOKIE儲存SESSIONID的方式ini_set('session.cookie_domain', 'abc.com');
回複討論(解決方案)
用的thinkphp 架構 3.23
<?php'SESSION_OPTIONS'=>array('type'=> 'db',//session採用資料庫儲存'expire'=>7200,//session到期時間,如果不設就是php.ini中設定的預設值 ),'SESSION_TABLE'=>'v4_session', //必須設定成這樣,如果不加首碼就找不到資料表,這個需要注意?>
session一定要用session_set_save_handler重寫.
其實你設定到期時間一年後,但是其他沒有儲存為一年後的使用者還會觸發session的gc,從而強制回收你的session.
兩種方法重寫:
1. 儲存redis,mysql等資料庫, 到期時間你自己控制.
2. 隱藏檔,我的技巧是強制修改session檔案的時間為未來的時間,這樣其他使用者觸發gc後就沒法回收你的session檔案了.
存的資料,session是跟隨cookie的,問題是cookie這邊sessid到期換掉了,而不是session到期
session.gc_maxlifetime = 1440; 指定最後一次訪問後的 1440 秒失效
但是否真的失效,取決於
session.gc_probability 和 session.gc_pisor 比值(失效機率)
對於 thinkphp,你有 'expire'=>7200
那麼應在最後一次訪問的 7200 秒(2小時)後失效
如果不是這樣,那就放棄 thinkphp
很程式沒關係,程式存到資料庫的都是正常的。7200是有效
是因為PHPSESSID 值失效(a變b),a在資料庫裡是存在,但b是不存在的,所以相當導致使用者的整個session失效
伺服器上session失效,網頁重新整理當然重新分配了一個sessionid啊
session.cookie_lifetime=0指的是在瀏覽器關閉時刪除cookie,除非手動刪或者被其他軟體強清了
不知道對不對,PHPSESSID 是根據cookie傳到用戶端,用來判斷使用者的唯一性,如果cookie設定0秒,會自動清空,用戶端沒有phpsessid,服務端當然會重新分配一個,所以就登出了。
伺服器session沒有失效,存的資料庫。。。
是因為存在coookie 的 phpsessid 值變了,而這個phpsessid在資料庫裡是沒資料的
對的,問題是系統配置是2個小時,有時候10分鐘有時候1個小時PHPSESSID就被重新分配了(同一個頁面一直重新整理)
找不出原因
session和cookies那點事說難不難, 說簡單也不簡單, 整到完美磨合,倆合作完美無間要仔細研究下,不過封裝好以後就省事了.
你看看你是不是session_id($_COOKIES['sess_id']);沒有這樣接管.
還有cookies的範圍問題,作用路徑問題,查查setcookie參數你就知道了...
正常不會這樣,既然tp設定了7200實效,根據session.gc處理,只會在7200秒後執行清除
你可以檢查是否有其他程式導致session實效。
之前做法是,把session儲存在cookies,如果判斷session失效但cookie沒有實效,則把cookie複製入session處理。
已經找出問題
<?php function session($name='',$value='') { ini_set('session.gc_maxlifetime', $name['expire']); //ini_set('session.cookie_lifetime', $name['expire']);}?>
是TP的這裡重寫了session存在cookie的生存周期導致sessionid在cookie的存活周期是我們設定的那個參數