2010-07-18 137 views

回答

15

該信息不可通過document.cookie獲得,但是如果您真的非常渴望它,可以嘗試通過XmlHttpRequest對象執行請求到當前頁面並使用getResponseHeader()訪問cookie標頭。

+2

響應頭上沒有這樣的東西。 我試過了:request.getAllResponseHeaders();它提供了一個關閉的事情:到期日:星期四,1981年11月19日08:52:00格林尼治標準時間 但沒有相關的各種cookie與他們到期時間... ...爲什麼呢?服務器與客戶端Cookie無關...... – Carmageddon 2012-11-27 08:28:07

+1

出於安全原因,從xhr響應中刪除了Set-Cookie和Set-Cookie2標頭。你可以做的是在服務器端設置額外的cookie和cookie到期日期並讀取它。 – 2015-05-10 07:55:37

+0

我不認爲這會起作用 – 2015-07-15 22:00:00

22

這是不可能的。 document.cookie包含以下字符串中的信息:

key1=value1;key2=value2;... 

因此,沒有關於日期的任何信息。

您可以在不同的cookie變量存儲這些日期:

auth_user=Riateche;auth_expire=01/01/2012 

但用戶可以更改此變量。

+0

好的建議... – mkoistinen 2017-11-28 04:25:52

0

一種可能性是刪除到cookie,您正在查找並重寫它的到期日期。然後你就會知道到期日期。

2

你無法通過JavaScript得到一個cookie的有效期,因爲當你嘗試讀取cookie從JavaScript的document.cookie中僅返回名稱和cookie的成對

1

的價值是,它是可能的。我已經分開的代碼在兩個文件中:

的index.php

<?php 

    $time = time()+(60*60*24*10); 
    $timeMemo = (string)$time; 
    setcookie("cookie", "" . $timeMemo . "", $time); 

?> 
<html> 
    <head> 
     <title> 
      Get cookie expiration date from JS 
     </title> 
     <script type="text/javascript"> 

      function cookieExpirationDate(){ 

       var infodiv = document.getElementById("info"); 

       var xmlhttp; 
       if (window.XMLHttpRequest){ 
        xmlhttp = new XMLHttpRequest; 
       }else{ 
        xmlhttp = new ActiveXObject(Microsoft.XMLHTTP); 
       } 

       xmlhttp.onreadystatechange = function(){ 
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
         infodiv.innerHTML = xmlhttp.responseText; 
        } 
       } 

       xmlhttp.open("GET", "cookie.php", true); 
       xmlhttp.send(); 

      } 

     </script> 
    </head> 
    <body> 
     <input type="button" onclick="javascript:cookieExpirationDate();" value="Get Cookie expire date" /> 
     <hr /> 
     <div id="info"> 
     </div> 
    </body> 
</html> 

cookie.php現在

<?php 

    function secToDays($sec){ 
     return ($sec/60/60/24); 
    } 

    if(isset($_COOKIE['cookie'])){ 

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

?> 

,index.php文件必須加載一次。通過AJAX請求,「獲取Cookie過期日期」按鈕將始終爲您提供更新的「剩餘時間」,以便在這種情況下以天爲單位。

+2

'intval($ _ COOKIE ['cookie'])'假設您將過期值存儲在cookie值中 – 2015-07-14 19:34:44

+0

@ JonathanLeaders正確地說,它被存儲在cookie值中,我沒有明白你的意思 – 2015-07-15 07:35:25

+2

OP指的是從已經存在的cookie中檢索日期,而不是我們創建的新日期,將日期作爲單獨的信息存儲 – 2015-07-15 21:58:22

1

如果您使用的是Chrome,則可以轉到「資源」選項卡並在左側邊欄中找到「Cookies」項。從那裏選擇你正在檢查設置cookie的域名,它會給你一個與該域名相關的cookies列表,以及它們的截止日期。

+1

即使這沒有解決使用JavaScript,它仍然有用。 – Stonetip 2015-01-07 20:13:45

11

現在已經可以用新的Chrome更新47版的2016年,你可以看到它通過開發工具的資源選項卡上enter image description here,選擇餅乾和尋找下您的Cookie有效期「到期/ max-age的」

+0

在這個例子中,你可以解釋一下當'Expires'列顯示'會話'的一些cookie和一個日期的含義。 – 2016-11-25 05:04:10

+1

@GauravOjha如果它說會話,那麼它意味着它會在服務器分配給你一個新的會話時到期,並且可以通過(A)註銷(B)關閉瀏覽器(不是標籤)來完成 ,,,,,但是如果它顯示一些日期,這意味着它是一個手動創建的cookie(某些代碼創建它並明確設置了日期) – 2016-11-27 08:03:18

+0

這很好。順便說一句。它現在是應用程序選項卡 - 不是資源(mac)。 – chiappa 2017-07-31 13:43:15