2017-09-01 30 views
0

我去和使用下面的腳本PHP - 會話cookie到期/無效更早接料

session_start(); 
$_SESSION['username'] = $query[0]['username']; 
$_SESSION['email'] = $_POST['email']; 
$_SESSION['image'] = $query[0]['image']; 
$_SESSION['role'] = $query[0]['role']; 
$_SESSION['banned'] = $query[0]['banned']; 
$_SESSION['id'] = $query[0]['id']; 
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
$_SESSION['useragent'] = $_SERVER['HTTP_USER_AGENT']; 
setcookie(session_name(),session_id(),time()+604800,"/"); 
//redirect to homepage since now logged in. 

login現在在主頁再次IM和登錄,一切正常,因爲它應該。 但僅僅幾個小時後,isset($ _ SESSION ['username'])將返回false,但過期時間仍然設置爲7天,並且cookie仍然存在。

截止日期的小時比我的時區實際時間小時滯後1小時。不確定這是否重要。我將時區服務器端更改爲隨機時區,cookie過期數據未更改。

htaccess的:

php_value session.cookie_lifetime 604800 
php_value session.gc_maxlifetime 604800 

(這是htaccess的根,與第一個代碼塊的上方,在根/登錄不知道它很重要。)。

+0

您的pc時間是18:52 GMT – craig

+0

@craig正確。 – user8549339

+0

設置時區並重試 - date_default_timezone_set('您的時區'); – craig

回答

0

將您的session_start();session_regenerate_id();移動到腳本的底部。

<?php 
$_SESSION['username'] = $query[0]['username']; 
$_SESSION['email'] = $_POST['email']; 
$_SESSION['image'] = $query[0]['image']; 
$_SESSION['role'] = $query[0]['role']; 
$_SESSION['banned'] = $query[0]['banned']; 
$_SESSION['id'] = $query[0]['id']; 
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
$_SESSION['useragent'] = $_SERVER['HTTP_USER_AGENT']; 
setcookie(session_name(),session_id(),time()+604800,"/"); 
session_start(); 
session_regenerate_id(); 
?> 

這個邏輯背後的原因是你正在設置cookies,一旦它們被設置並準備就緒,你就開始會話。有一個回答here,解釋它更好:

  1. Cookie數據發送頁面的標題。

  2. 將標頭髮送到客戶端後,您無法設置cookie。

  3. 只要您開始輸出任何數據到客戶端(即:瀏覽器),就會發送標題。

+0

你能解釋一下這到底是什麼嗎?至於什麼區別? – user8549339

+0

@ user8549339我已更新我的回答 – Samuel

+0

好的,我通常運行s​​ession_start();在我需要抓取的所有頁面上輸入ex,username或image。我不應該這樣做嗎?如果我放棄這一點,它實際上並沒有顯示出來。也不會重新生成ID,基本上刪除舊的和抓住一個新的會話cookie等? – user8549339

0

這可能是最糟糕的嘗試使用內置session_set_cookie_params,而不是做一個黑客更改cookie的有效期......還要注意的是session_regenerate_id可引起sessions being lost

+0

是啊似乎我不需要session_regenerate_id,我已經刪除它,一切工作,因爲它應該。不知道我爲什麼擁有它,不知道這是否解決了問題。 – user8549339