2012-09-10 27 views
2

如何爲會話設置無限次cookie?我曾嘗試下面的下面,但是一天之後我仍然得到我的會話未定義指數告示:是否可以將cookie的無限時間設置爲會話變量?

setcookie('idcourse', 'CourseID', 9999999999); 
setcookie('namecourse', 'CourseName', 9999999999); 
setcookie('id', 'ID', 9999999999); 

if (isset($_POST['idcourse'])) { 

$_SESSION['idcourse'] = $_POST['idcourse']; 

} 

if (isset($_POST['namecourse'])) { 

$_SESSION['namecourse'] = $_POST['namecourse']; 

} 

if (isset($_POST['id'])) { 

$_SESSION['id'] = $_POST['id']; 

} 
+0

cookies與$ _POST無關。在所有使用會話的腳本中對會話做任何事情之前,你是否完成了session_start()?請注意,大多數Cookie都受到y2038k問題的困擾。您傳遞的是34位數字,大多數瀏覽器僅使用32位字符串作爲時間字符串。 –

+0

您正在將這些Cookie設置爲9999999999,這是一個1986年日期的unix時間戳。更重要的是,設置這些cookie與處理$ _SESSION的方式無關。 –

+0

$ _SESSION與單個Cookie相關:PHPSESSID。但是,即使增加PHPSESSID的生命週期也不會改變$ _SESSION存儲的時間長度 - 會話存儲會自動垃圾收集服務器端。 –

回答

3

您必須添加一個到期日,或該cookie將被用作一個會話和過期當你離開該網站,

你在做什麼是接近正確的,但你需要稍微改變它;

你設置過期9999999999(您需要指定一個UNIX TIMESTAMP將來),所以我用了以下內容:

$inTwoMonths = 60 * 60 * 24 * 60 + time(); 
setcookie('idcourse', 'CourseID', $inTwoMonths); 
setcookie('namecourse', 'CourseName', $inTwoMonths); 
setcookie('id', 'ID', $inTwoMonths); 

將使餅乾2個月到期,可以相應地增加此。

+0

9999 ...是一個有效的時間戳,它只是大於32位,因此大多數瀏覽器可能會忽略/清零。 –

+0

非常感謝,我會標記答案,當它允許我在幾分鐘:) – user1653070

+0

我沒有說它不是有效的,它是11/20/86 @ 11:46:39上午美國東部時間這是沒有用的任何人都認爲,時間戳總是x *現在的未來,而不是歷史上的特定日期。很高興幫助用戶! –

0

您不應該將cookies設置爲無限時間。如果您需要長時間存放東西,請使用localStorage。它們不會過期。它們不是真正的cookies,但它也是在瀏覽器中設置信息的一種方式。你只需要使用JavaScript。

至於PHP,你可以做的是你可以依靠永久存儲你的信息的數據庫。您可以在本地存儲中設置可用於加載會話信息的內容。但我的建議只是使用localStorage。

相關問題