2013-06-05 23 views
1

我用PHP創建了一個登錄/註銷系統,其中客戶端可以決定使用「記住我」按鈕。 在我的login.php文件,我檢查,看看他們是否想記住這樣的:setting.gc_maxlifetime有條件地

if(isset($_POST["remember_me"])){ 
    $_SESSION["remember_me"] = true; 
} 

因此,當我想設置gc_maxlifetime,我需要知道的是,客戶端應該記住與否。但是,正如我們所知,gc_maxlifetime應該設置在session_start()之前,並且我無法訪問變量

$_SESSION["remember_me"] 

變量。我該怎麼辦? 是否有任何其他方式告訴服務器,因爲當某個會話應該是垃圾收集器的主題?

在此先感謝。

+1

你將不得不編寫自己的會話保存處理程序。 – Orangepill

回答

1

我不認爲它是一個好主意,使用持續登錄會話。一個因爲有不同的gc_maxlifetime不同的會話不會工作。作爲the manual指出

如果不同的腳本具有不同的session.gc_maxlifetime數值但是共享了同一個地方存儲會話數據,則該腳本與最小值會清理數據。在這種情況下,請將此指令與session.save_path一起使用。

所以,除非你也想改變會話存儲位置,不要去那裏。

除了這個問題,你不僅要保持他的登錄信息在服務器上活着,而且要保持他的整個會話。如果您的應用程序在會話中存儲了更多數據,並且您沒有正確清理它,那麼服務器會以長時間的持續會話結束,而這些會話可能永遠不會再使用。儘管在會話中存儲大量數據是錯誤的,但這是另一個討論。

爲了創建一個記住我的功能,我會在stackexchange上檢查how-to-securely-implement-a-remember-me-feature的某些指針。

+0

我已經實現了關閉每個用戶訪問會話的系統:$ _SESSION [「last_activity_time」] = time(); ,我在每個頁面調用中檢查每個用戶的'時間'。 用戶的最大空閒時間爲一小時。對於那些點擊記住我的人,最長閒置時間是兩週。 如果我將所有gc_maxlifetimes設置爲「兩週」數量,是否會顯着降低性能? (因爲您知道,它不直接影響功能。) –

+1

性能明智,在大多數情況下,它不會是一個非常大的問題,除非您在會話中存儲大量數據。安全方面,這可能是一個問題,因爲您將創建大量持久有效的會話。但是再一次,記住我的cookies也是一樣。檢查http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes/1270960#1270960關於如何進行長時間的會話。只是改變一生不夠。但是,使用會話進行持久登錄只是感覺不對,即使你讓它工作。 –