2012-11-05 112 views
1

我的PHP會話隨機過期,很少會持續大約5分鐘(300秒)以上。PHP會話快速隨機過期

我正在試驗PHP & MySQL登錄腳本:http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL(sec_session_start函數在下面解壓縮)。

function sec_session_start() { 
    $session_name = 'sec_session_id'; // Set a custom session name 
    $secure = false; // Set to true if using https. 
    $httponly = true; // This stops javascript being able to access the session id. 

    ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies. 
    $cookieParams = session_get_cookie_params(); // Gets current cookies params. 
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 
    session_name($session_name); // Sets the session name to the one set above. 
    session_start(); // Start the php session 
    session_regenerate_id(true); // regenerated the session, delete the old one.  
} 

我已經對主題做了大量的閱讀,試圖解決問題並瞭解許多原因會導致PHP會話過早失效。如果您對如何解決問題有任何想法,請讓我知道,因爲這個問題讓我生氣了!

請注意:
1.在php.ini中我已經設置的session.gc_maxlifetime = 3600
2.我的主機的iPage。
2.我試圖編輯session_set_cookie_params以下內容,但它並沒有解決問題:

session_set_cookie_params(time()+1800, "/", $cookieParams["domain"], $secure, $httponly); 
+0

你有沒有檢查服務器+客戶端時鐘是否相對不同步? –

回答

0

我有一個類似的登錄腳本,當我查看我設置的cookie時找到了解決方案。出於某種原因,此腳本將在全新會話啓動時爲example.com和www.example.com設置Cookie。在session_set_cookie_params()中顯式設置您的域將會解決這個問題。

function sec_session_start() { 
    $domain = 'example.com'; // note $domain 
    $session_name = 'sec_session_id'; // Set a custom session name 
    $secure = true; // Set to true if using https. 
    $httponly = true; // This stops javascript being able to access the session id. 
    ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies. 
    $cookieParams = session_get_cookie_params(); // Gets current cookies params. 
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $domain, $secure, $httponly); // note $domain 
    session_name($session_name); // Sets the session name to the one set above. 
    session_start(); // Start the php session 
    session_regenerate_id(true); // regenerated the session, delete the old one.  
} 
2

您的代碼爲每一個會話一個單一的,一成不變的名字嗎?你有沒有想過,每次有人開始新的會議,它會打破前一個?會話標識符是唯一的是有原因的。

除此之外,問問你的主人。他們可能會做一些荒謬的事情,比如每隔X分鐘清除/ tmp。