2013-03-06 59 views
0

我的默認PHP會話是30分鐘。8小時重命名php會話30分鐘後丟失數據

我得到這個第一個代碼:

<?php 
session_set_cookie_params(28800); 
session_name('TEST'); 
session_start(); 
session_regenerate_id(true); 

$_SESSION['test'] = 'jam'; 
?> 

而這第二個:

<?php 
session_set_cookie_params(28800); 
session_name('TEST'); 
session_start(); 
session_regenerate_id(true); 

echo $_SESSION['test']; 
?> 

事實是,我會在不活動30分鐘後消失。

定時例如:

00:00 : run first script 
00:10 : run seconde script : i got "jam" 
00:20 : run seconde script : i got "jam" 
00:40 : run seconde script : i got "jam" 
01:11 : run seconde script : session is lost 

希望你能給我任何線索,以解決這個問題。

回答

0

您只設置了cookie的生命週期,與會話數據的實際生存期無關。如果您使用將會話保存到文件系統的默認會話保存處理程序,則會話數據的生存期由session.gc_maxlifetime指令控制。你可以用ini_set像這樣覆蓋此值:

ini_set('session.gc_maxlifetime', 28800); 

請注意,如果您也有使用會話的其他腳本和他們分享的會話相同的保存路徑,則最低gc_maxlifetime被用於所有會話目錄。因此,如果您想更改gc_maxlifetime值,那通常意味着您還想指定自己的路徑,以存儲會話。你可以用session_save_path功能做到這一點:

session_save_path('/path/to/your/sessions'); 
+0

您好,感謝您的回答,我 需要在我的網站2個不同的會話:對於前部的30分鐘會議和管理部分8小時會話。如果我使用session_save_path()定義了會話的特定路徑(順便說一句,我可以使用session_set_cookie_params()?)定義路徑的任何關係),我如何確定我的ini_set('session.gc_maxlifetime ',28800); ? – ERO 2013-03-06 14:25:36

+0

會話是否需要存儲在公共部分和管理員部分之間?如果答案是肯定的,那麼你必須讓這兩個會話持續8小時。 session.gc_maxlifetime涉及您在同一腳本中設置了保存路徑的會話。您可以爲公共部分和管理員部分設置不同的保存路徑,這樣您可以爲會話設置不同的生存期。 – 2013-03-06 14:36:51