我在約35-40分鐘後會話變量變爲null時出現問題。但是,會話ID似乎仍然顯示爲有效(並且與以前相同)。約30分鐘後PHP會話變量爲空
我創建了一些測試代碼,它讀取並顯示會話變量,然後在越來越多的秒數後重新加載頁面。它一直運行到2400秒,此時顯示屏上的變量爲空。換句話說,它在刷新之間等待2400秒時總是爲空。我將.htaccess中的session.gc_maxlifetime設置爲7800(顯然這是因爲它使用ini_get讀取爲7800)。
我要麼失去了一些明顯的東西,要麼是一些嚴重的奇怪現象。這讓我瘋狂。
這是在帶有WHM的Linux VPS上。
代碼來創建測試會話:
<?php
// start session
session_start();
// set session value
$_SESSION["session_memberid"] = 1234567;
$_SESSION["session_refresh"] = 2000;
// write file, close
session_write_close();
// display confirmation
echo json_encode(array(
'$_SESSION["session_memberid"]' => $_SESSION["session_memberid"],
'session_id' => session_id(),
'maxlifetime' => ini_get('session.gc_maxlifetime')
));
?>
代碼讀取會話(自動重新加載):
<?php
// start session
session_start();
// get session id
$session_id = session_id();
// get stored memberid
$member_id = $_SESSION['session_memberid'];
$_SESSION['session_memberid'] = $member_id;
// get last activity
$lastactivity = $_SESSION["last_activity"];
// increasing refresh time
$refresh = $_SESSION["session_refresh"];
$_SESSION["session_refresh"] = $refresh + 100;
// update time
$_SESSION["last_activity"] = time();
// write file, close
session_write_close();
...
(code to display and refresh variables)
輸出時有效的讀:
{"memberid":1234567,"session_id":"c9d20d4992f184f29b259ef5ccab275f","sessionpath":"\/tmp","maxlifetime":"7800","sessioncookiepath":"\/","sessioncookielifetime":"0","referrer":"","autostart":"0","cache":false,"time":1365004882,"cookie":{"lifetime":0,"path":"\/","domain":"","secure":false,"httponly":false},"refresh":2400}
輸出時無效的讀取顯示memberid(我們需要的變量),時間(last_activity)和刷新時間爲空。
任何想法?
另一個說明:我使用vi檢查了/ tmp目錄中的sess_文件。奇怪的是這個文件是空的(儘管vi給了我一個關於我沒有訪問權限的警告)。 – joshd