2010-11-17 68 views
45

當我創建一個cookie時,如何獲取cookie的expire time如何獲取cookie的過期時間

非常感謝。

+2

http://bytes.com/topic/php/answers/486298-get-cookie-expiry-time – 2010-11-17 10:02:46

+1

獲得cookie的到期時間是什麼意思?你想知道如何計算它?或者如何從已經設置的cookie中檢索它? – Gumbo 2010-11-17 10:04:51

+0

您可以使用https:// github上的'Cookie :: parse($ cookieHeader)'。com/delight-im/PHP-Cookie和'ResponseHeader :: get('Set-Cookie')',否則就不知道如何獲取cookie頭。 – caw 2016-07-12 23:53:45

回答

40

這很難實現,但可以在另一個cookie中設置cookie過期日期。然後可以稍後閱讀此cookie以獲取到期日期。也許有更好的辦法,但這是解決你的問題的方法之一。

+10

是的,就是這樣。這就是微軟所說的:「瀏覽器負責管理cookie,cookie的過期時間和日期可以幫助瀏覽器管理它的cookie存儲。因此,雖然你可以閱讀cookie的名字和價值,但是你不能閱讀cookie的到期日期和時間,當瀏覽器向服務器發送cookie信息時,瀏覽器不包含到期信息。「 http://msdn.microsoft.com/en-us/library/ms178194(v=vs.100).aspx – Riga 2012-09-17 10:41:07

6

當創建通過PHP模具默認值的cookie是0,從手動:

如果設置爲0,或省略時,cookie 將在會話 結束時到期時(當瀏覽器關閉)

否則,你可以作爲第三個參數以秒爲單位的餅乾壽命:

http://www.php.net/manual/en/function.setcookie.php

但是,如果你的意思是要獲得一個已經存在的cookie的剩餘生命週期,我擔心這是不可能的(至少不是以直接的方式)。

8

您可以設置您的包含有效期限的cookie值,並從cookie值中獲得您的到期日期。

// set 
$expiry = time()+3600; 
setcookie("mycookie", "mycookievalue|$expiry", $expiry); 

// get 
if (isset($_COOKIE["mycookie"])) { 
    list($value, $expiry) = explode("|", $_COOKIE["mycookie"]); 
} 

//記住,在這種情況下,一些雙向加密會更安全。請參閱:https://github.com/qeremy/Cryptee

66

將編碼的json放入cookie中是我最喜歡的方法,以便從cookie中正確獲取格式化的數據。 試一下:

$expiry = time() + 12345; 
$data = (object) array("value1" => "just for fun", "value2" => "i'll save whatever I want here"); 
$cookieData = (object) array("data" => $data, "expiry" => $expiry); 
setcookie("cookiename", json_encode($cookieData), $expiry); 

那麼當你拿到你的cookie下一次:

$cookie = json_decode($_COOKIE[ "cookiename" ]); 

你可以簡單地提取到期時間,這是作爲插入的cookie自身內部的數據..

$expiry = $cookie->expiry; 

以及另外作爲可用對象出來的數據:)

$data = $cookie->data; 
$value1 = $cookie->data->value1; 

等我發現這是一個更簡潔的使用cookies的方式,因爲您可以將任意多個小對象嵌入其他對象中,只要您願意!

+3

這是獲勝的答案。謝謝。 – 2014-02-07 12:33:38

+0

我也認爲這是更好的答案(或策略)。爲什麼要在使用同一個cookie存儲過期數據時創建另一個cookie? – Andrew 2014-09-10 12:28:56

+0

絕對聰明......我希望我能授予超過允許的更多代表。 1+! – 2015-01-15 04:15:56

0

要獲取cookies過期時間,請使用此簡單方法。

<?php 

//#############PART 1############# 
//expiration time (a*b*c*d) <- change D corresponding to number of days for cookie expiration 
$time = time()+(60*60*24*365); 
$timeMemo = (string)$time; 

//sets cookie with expiration time defined above 
setcookie("testCookie", "" . $timeMemo . "", $time); 

//#############PART 2############# 
//this function will convert seconds to days. 
function secToDays($sec){ 

    return ($sec/60/60/24); 

} 
//checks if cookie is set and prints out expiration time in days 
if(isset($_COOKIE['testCookie'])){ 

    echo "Cookie is set<br />"; 
    if(round(secToDays((intval($_COOKIE['testCookie']) - time())),1) < 1){ 
     echo "Cookie will expire today."; 
    }else{ 
     echo "Cookie will expire in " . round(secToDays((intval($_COOKIE['testCookie']) - time())),1) . " day(s)"; 
    } 

}else{ 
    echo "not set..."; 
} 

?>

你需要保持第1部分和在不同的文件 2部分,否則你會得到相同的到期日期,每次。