2012-06-14 273 views
2

我正在設置一個cookie,但有一些問題。目前cookie格式是這樣的:PHP Cookie設置到期時間爲無

setcookie("company_id", $company_id, 0, '/'); 

那麼到期時間設定爲0意味着cookie將永不過期,但是當我試圖讓我通過在這樣的第三個參數爲空參數沒有設置任何到期時間:

setcookie("company_id", $_POST["company_id"], "", '/'); 

但是這是行不通的,餅乾是沒有得到,當我改變了空參數0比開始工作。有什麼建議麼?

回答

5

過期參數以秒爲單位。 Setcookie function

除name參數以外的所有參數都是可選的。您也可以用 替換帶有空字符串(「」)的參數,以便跳過該參數 。因爲expire參數是整數,所以不能使用空字符串跳過 ,而是使用零(0)。

所以,除非你希望它在會話結束時過期,否則你將需要一個非零值。

0建議cookie應該在會話結束時過期,如果你想讓它「永不過期」使用很​​長時間。

setcookie("TestCookie", $value, time()+3600*24*365*10, '/') 

例如,這將是十年。

請記住,人們可以經常清除餅乾。所以你的可能會被刪除。 Cookie也是瀏覽器專用的,因此如果每次都需要存儲在其中的數據,那麼如果用戶切換瀏覽器,則除非您再次設置,否則這將不再可用。

+0

如果我沒有在時間上使用任何參數,將會發生什麼 – 2013-09-16 12:16:45

+0

@bhawin不包括它會和設置爲0的效果相同,這意味着它將在用戶會話結束時過期。 (當他們離開網站時) –

+0

thnx很多@mr d – 2013-09-17 07:21:11

3

你在問錯誤的問題。沒有辦法將cookie設置爲不過期;這不是一個PHP的限制,它不是cookie規範的一部分(http://www.faqs.org/rfcs/rfc2965.html)。

最好的辦法是在將來使用一個日期。例如,要設置在二十年後過期的cookie:

setcookie(
    "CookieName", 
    "CookieValue", 
    time() + (20 * 365 * 24 * 60 * 60) 
); 
+0

我不想設置任何失效日期。因爲如果我的服務器託管在GMT + 5並且用戶在格林威治標準時-5會發生什麼,這會導致問題? –

+0

如果這個setcookie(「TestCookie」,$ value);可以在沒有指定任何時間的情況下工作,而不是爲什麼cookie不工作,如果它在不同的目錄中並且時間參數爲空? –