【TP3.2.*】解決session過期不失效 和 設置不成功問題


// ---------- 更新與 2019/01/23日 -------------//

1、問題:本來我想設置session有效期1800秒即30分鍾 失效的,可是實際使用TP3.2.0的時候發現,登錄了幾天用戶竟然沒有失效,一直都可以登錄。

1、回答:設置不成功問題:gc回收機制,是概率性的,默認1/100,這就解釋了為什么測試時候,登錄幾天的用戶session不失效。

因為:session是基於cookie的,php.ini 默認cookie_lifetime=0,(這里的0有2個意思:分別是根據瀏覽器的設置不同,如果瀏覽器沒有啟用【瀏覽器關閉cookie即失效】即cookie永不失效,否則就是“瀏覽器關閉即cookie失效”),而gc_maxlifetime=24分鍾,所以每次session_start之前

服務器都會進行一次 gc操作,且每次回收垃圾的概率為1/100,這就是測試環境為什么不失效的根本原因。

(正式環境用戶量上來后,你就會發現默認的session配置24分鍾必定失效)

PHP官網session:  //php.net/manual/zh/session.configuration.php

// ---------- 更新與 2019/01/23日 -------------//

 

2、手動設置session過期時間,比如7天,15天或者一個月:

  2.1 在config.php中設置SESSION_OPTIONS數組

/* SESSION全局配置 */
    'SESSION_OPTIONS' => array(
        'path' => RUNTIME_PATH . 'Temp/',
        'use_cookies' => 1,         //是否在客戶端用 cookie 來存放會話 ID,1是開啟
        'use_trans_sid' => true,    //跨頁傳遞
        'expire' => 3600*24*7,
    ),

 

(特別注意:如果你想session在指定時間必定失效,再執行下面的操作:意思是 修改cookie的有效期,從0永不失效變成指定expire值時必定失效) 

2.2 在ThinkPHP/common/functions.php中1074修改(或全局搜索【gc_maxlifetime】):

  將 

if(isset($name['expire']))          ini_set('session.gc_maxlifetime', $name['expire']);

  修改成:

if(isset($name['expire'])){ini_set('session.gc_maxlifetime', $name['expire']);ini_set('session.cookie_lifetime', $name['expire']);}

  保存,清除瀏覽器和服務器RunTime/Temp 下緩存,再次登錄頁面,等待過期即可。(測試時候可以設置expire=10)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM