通常情況下,網站會向用戶提供選擇以記住他的登錄信息,因此它會將Cookie生存期設置爲零或第一次會話開始時爲X.在PHP中設置會話持續時間的正確方法是什麼?
要記住這個選擇,我把生命週期值放在$ _SESSION var。但是當我想要繼續會話時,我無法在會話開始前檢索此值,並且如果我想調用session_set_cookie_params(),我必須先執行此操作。
所以目前我做不是當我繼續會話時調用session_set_cookie_params()。相反,我保存會話開始時的當前時間,並在會話繼續時檢查它。這是代碼(注:這是一個簡化版本,原代碼具有所有其他需要的東西,如session_register_shutdown()):
// when I start the session
[...]
session_set_cookie_params($duration); // $duration was set before
session_start();
$_SESSION['starttime'] = time();
$_SESSION['duration'] = $duration;
//-----------------------------------
// when I continue the session
$ok = true;
session_start();
if (isset($_SESSION['starttime']))
{
$elapsed = $_SESSION['starttime']; - time();
$duration = $_SESSION['duration'];
if ($elapsed >= $duration and $duration !== 0)
{
$ok = false;
}
}
else
{
$ok = false;
}
if (! $ok)
{
// destroy the session
}
這是正確的嗎?如果不是,爲什麼還有更聰明的方法來處理會話持續時間?
我會加倍投票如果可以的話,我會比一次。 – Jon
嗯,這並不回答「爲什麼」:)爲什麼我不應該使用會話機制? –
因爲:-)首先,因爲會話文件的生命週期,你將不得不增加(很多) - 因此比平常多的會話文件將會累積。然後這些文件中會有很多數據(可能是?),其中大部分數據不需要存儲在那裏,而用戶在頁面上不活動。 – CBroe