2010-07-18 135 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