我正在使用基於java的上傳構造http://www.javaatwork.com/java-upload-applet/details.html,我試着在夜間運行。session.gc_maxlifetime是否指定自上次更改單個會話變量以來的最長生命週期?
- 它基本上存儲在服務器的硬盤驅動器上的所有內容(在/ var/WWW /私營/ $用戶id)
- 確保數據良好,形成
- 然後它傳遞到永久存儲(亞馬遜S3 )。
步驟1完成後,我運行下面的代碼:
if($_SESSION['userId'])
{//Makes sure that data is well-formed}
else
{echo 'you are not logged in';}
我試圖運行這四個小時才發現you are not logged in
打印到屏幕。
下面是CGI的php.ini文件中的相應指令(我使用Ubuntu 12.04與Apache2的。)
session.gc_probability = 0
session.gc_divisor = 1000
session.gc_maxlifetime = 14400 //this is 30 hours, which is far greater than the 4 hours it was running
session.cache_expire = 1800
session.cookie_lifetime = 0
大多數這些指令與例外的默認session.gc_probability
和session.gc_maxlifetime
。
我試圖解決這個問題,並遇到了一個真正有用的博客傑夫從中我推斷,瀏覽器可以導致存儲在瀏覽器中的PHPSESSID cookie被刪除,如果瀏覽器內的網站從一段時間內不活動發生。他建議
「在瀏覽器中創建一個後臺JavaScript進程,向服務器發送定期檢測信號。重新生成一個新的cookie,例如每5或10分鐘一次。 http://www.codinghorror.com/blog/2008/04/your-session-has-timed-out.html
所以我決定這樣做。
function myTimeoutFunction()
{
$.ajax({
url: "heartbeat.php",
success: function() {
}
});
setTimeout(myTimeoutFunction, 15*60*1000);
}
myTimeoutFunction();
heartbeat.php <?php session_start(); ?>
我要測試這個用於上載應採取〜4小時。不過,我剛剛看了以下
一般來說,你可以說session.gc_maxlifetime指定因爲您的會話數據的最後一個變化最大壽命(不最後一次在session_start叫)
https://stackoverflow.com/a/1516338/784637
如果我有3個會話變量,$_SESSION['userId'] $_SESSION['firstName'] $_SESSION['lastName']
,我會需要在heartbeat.php
session_start();
$_SESSION['userId'] = $_SESSION['userId'];
$_SESSION['firstName'] = $_SESSION['firstName'];
$_SESSION['lastName'] = $_SESSION['lastName'];
他們所有的值重置0
或者我可以重置一個值
session_start();
$_SESSION['lastHeartbeat'] = time();
讓其他三個會不會過期?
+1。我將補充一點,避免會話文件被其他進程或具有不同gc設置的其他php腳本所擦除的一種好方法是通過設置'session.save_path'將它們保存到一個僻靜的非web訪問目錄中 – goat
@rambocoder - 會只是爲'session.save_path'指令設置一個不同的路徑來防止那些「其他進程」?我將如何去確定這些流程可能是什麼? – user784637
是的,它會工作。我不知道如何找到這些進程 - 我不是一個系統管理員,但我想你可以設置哪些進程記錄哪些進程調用stat()或unlink()其他os級別的調用,參與gc過程。但是,除了清理tmp文件夾的cron作業之外,可能的罪魁禍首是其他php腳本在同一個共享Web服務器上調用具有不同配置的session_start()。 – goat