如何从javascript获取cookie到期日期/创建日期?

IT技术 javascript cookies
2021-02-28 19:48:04

是否可以从 javascript 中检索现有 cookie 的创建日期或到期日期?如果是这样怎么办?

6个回答

不可能。document.cookie包含这样的字符串信息:

key1=value1;key2=value2;...

所以没有任何关于日期的信息。

您可以将这些日期存储在单独的 cookie 变量中:

auth_user=Riateche;auth_expire=01/01/2012

但用户可以更改此变量。

如果您需要在服务器端阅读这些内容,那可能不是问题,您可以加密 say auth_expire 的值
2021-04-30 19:48:04
好建议...
2021-05-13 19:48:04

该信息无法通过 document.cookie 获得,但如果您真的非常渴望它,您可以尝试通过 XmlHttpRequest 对象向当前页面执行请求,并使用 getResponseHeader() 访问 cookie 标头。

响应头上没有这样的东西。我试过: request.getAllResponseHeaders(); 它给出了一件很接近的事情:到期:格林威治标准时间 19 年 11 月 19 日星期四 08:52:00 但没有与各种 cookie 相关的标题及其到期时间......为什么会这样?服务器与客户端 cookie 无关...
2021-04-22 19:48:04
“但如果你真的非常渴望它”:-(
2021-04-28 19:48:04
出于安全原因,从 xhr 响应中删除了 Set-Cookie 和 Set-Cookie2 标头。您可以做的是在服务器端设置带有 cookie 到期日期的附加标头并阅读该标头。
2021-05-13 19:48:04
我不认为这行得通
2021-05-13 19:48:04

现在可以使用 2016 年版本 47 的新 chrome 更新,您可以通过应用程序选项卡下的存储 > Cookies 上的开发人员工具查看它在此处输入图片说明,选择 cookie 并在“过期/最大年龄”下查找您的 cookie 到期日期

该问题明确要求通过 Javascript 检索它。
2021-04-27 19:48:04
在这个例子中,你能解释一下当“过期”列显示一些 cookie 的“会话”和一个日期时的含义吗?
2021-05-02 19:48:04
@GauravOjha 如果它说 session 那么它意味着它在服务器为您分配一个新会话时过期,这可以通过 (A) 注销 (B) 关闭浏览器(不是选项卡),,,,, 但如果它显示一些date 这意味着它是一个手动创建的 cookie(一些代码创建了它并明确设置了日期)
2021-05-02 19:48:04
这很好用。顺便提一句。现在是应用程序选项卡——而不是资源 (mac)。
2021-05-07 19:48:04
@NeonWizard 硬饼干
2021-05-12 19:48:04

您无法通过 javascript 获取 cookie 的到期日期,因为当您尝试从 javascript 读取 cookie 时,document.cookie 仅返回 cookie 的名称和值成对

对的,这是可能的。我已将代码分成两个文件:

索引.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 过期日期”按钮将始终为您提供 cookie 过期的更新“剩余时间”,在这种情况下以天为单位。

哦..!好吧,这是有道理的。我认为 OP 是创建 cookie 的人。我的错。
2021-04-15 19:48:04
OP 指的是从现有 cookie 中检索日期,而不是我们创建的将日期存储为单独信息的新 cookie
2021-04-19 19:48:04
等等……但是,cookie 不是只能从创建它的站点访问吗?
2021-04-22 19:48:04
intval($_COOKIE['cookie']) 假设您将过期时间存储在 cookie 值中。
2021-05-07 19:48:04
@JonathanLeaders 确实,它被存储在 cookie 值中。我没有明白你的意思。
2021-05-09 19:48:04