現在問題是找不到導致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指的是在瀏覽器關閉時html' target='_blank'>刪除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的存活周期是我們設置的那個參數
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答