2013-04-26 74 views
8

我正在一個小型網站(閱讀:< 50個用戶)與我合作的非營利組織工作,我的PHP知識相當有限。目前我有一個登錄腳本,我通過在線教程找到了。我遇到的問題是,大約一個小時左右後,每個用戶都會被註銷。需要幫助使PHP登錄會話持續更長

安全真的不是內容的問題,理想情況下,我希望有人保持登錄多天或幾周。然而,Google上關於會話長度的任何搜索都會讓我想要縮短註銷計時器的人員。

至於代碼推移,一旦登錄頁面進行比較的用戶名和密碼的數據庫,並用如下:

session_register("myusername"); 
session_register("mypassword"); 
header("location:index.php") 

而且每個受保護的頁面就可以了開頭:

session_start(); 
if(!session_is_registered(myusername)){ 
header("location:login.html:); 
} 
+3

僅供參考'session_register' dephased – 2013-04-26 02:26:34

+0

一旦用戶有任何活動,最好重置會話計時器。 – Raptor 2013-04-26 02:31:00

回答

7

編輯您的.htaccess並把這樣的東西:

php_value session.gc_maxlifetime 2000 

2000是在幾秒鐘內。相應設置!這將告訴會話垃圾收集器不要銷燬會話2000秒。另外,session_register已棄用。

+1

因此,我可以簡單地將該行添加到.htaccess並將值設置爲604800一週的登錄名? (60 x 60 24 x 7)此外,作爲一個方面的說明:我知道session_register已被棄用,但我脫離谷歌的腳本使用它,它迄今爲止一直工作正常。我將如何去改變它不使用session_register並保持相同的功能? – 2013-04-26 02:34:48

+0

是的,604800將工作得很好。使用$ _SESSION ['username'] ='whatever';而不是session_register。 – ChrisG 2013-04-26 02:40:50

+0

非常感謝您的幫助! – 2013-04-26 02:43:38

4

如果您正在使用PHP的默認基於Cookie的會話管理(我相信你,因爲你沒有提到要改變session的默認工作的任何東西),你可以使用:

session_set_cookie_params(7200); // in seconds...session will last for 2 hours now 
session_start(); //once session cookie parameter is set, start the session.. 

session.gc*組INI值也用於此目的,但請記住gc只建議會話應該被垃圾回收時,並不意味着它會發生。

你可以閱讀有關cookie params heregarbage collection here

+0

你是正確的,假設我沒有改變任何關於cookies的內容。您擁有的第一行代碼,我認爲這也適用於每個受保護的頁面? – 2013-04-26 02:39:46

+0

是的,最好的方法是將其放入會話包含文件中,並將其包括在會話將處於活動狀態的每個頁面中。 – raidenace 2013-04-26 02:44:17

+0

如果包含在每個頁面中,那麼每次訪問其他頁面時都會將會話重置爲7200?如果您不斷更換頁面,則會話永遠不會結束 – 2017-02-23 00:29:34

6

鑑於你的問題,你的用戶羣的規模,我會選擇一個全局設置的改變,而不是試圖定製會話變量;這很簡單,你需要做什麼,只需很少的努力就可以適用於所有用戶。

您可以使用.htaccess文件中設置您的全局會話壽命(在其他的答案中概述):

php_value session.gc_maxlifetime 86400 //this is one day in seconds 

或者,你也可以將它設置在php.ini文件 - 一個片段,其中是:

; After this number of seconds, stored data will be seen as 'garbage' and 
; cleaned up by the garbage collection process. 
session.gc_maxlifetime = 86400 

對於只是單純的參考,你需要考慮長期的垃圾收集值:

86400 = one day 
604800 = one week 

你可以閱讀更多關於垃圾收集(gc)here