【问题标题】:Cookie expiration is browser specific or server specific?Cookie 过期时间是特定于浏览器的还是特定于服务器的?
【发布时间】:2015-07-14 07:21:09
【问题描述】:

我正在设置一个过期时间为

的 cookie
mktime(24,0,0).

我的问题很简单。如果浏览器时区不同,cookie是按照服务器时区还是浏览器时区过期?

【问题讨论】:

    标签: php cookies setcookie


    【解决方案1】:

    Set-Cookie 标头将时区信息作为过期日期时间的一部分,因此用户代理知道它应该何时过期。

    Set-Cookie: sessionToken=abc123; Expires=Wed, 09 Jun 2021 10:18:14 GMT

    来自setcookie 的 php 文档

    过期

    ...

    注意:您可能会注意到 expire 参数采用 Unix 时间戳, 与日期格式 Wdy、DD-Mon-YYYY HH:MM:SS GMT 不同,这是 因为 PHP 在内部进行了这种转换。

    【讨论】:

      【解决方案2】:

      来自PHP manualmktime函数:

      返回与给定参数对应的 Unix 时间戳。这个 timestamp 是一个长整数包含秒数 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)和指定的时间。

      它包含一个秒数,一个时间量:不需要关心时区。

      【讨论】:

      • 你说的都是真的,但它并没有完全回答这个问题。您指定 TTL 的事实并不意味着 PHP 可以正确翻译。最后,浏览器存储并过期 cookie,它不存储它需要在“24 小时后”删除它。
      • setcookie(AboutVisit, date("F jS - g:i a"), mktime(24,0,0));基本上它一直活跃到第二天 00:00:00 服务器端时间。?
      【解决方案3】:

      mktime(24,0,0)

      根据您正在运行的 timezone() 服务器计算机计算第二天 00:00:00 的 unix 时间戳,并返回整数时间戳。

      现在,当你在 setcookie(Visit, date("F jS - g:i a"), mktime(24,0,0)); 在浏览器上,它将“自纪元以来的时间戳”转换为本地时区并设置 cookie 的过期时间。

      您应该知道我们在这里仍然根据服务器端时间范围控制 cookie 的生命周期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 2020-02-20
        • 2018-01-11
        相关资源
        最近更新 更多