Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将cookie设置为永不过期_Php_Cookies - Fatal编程技术网

Php 将cookie设置为永不过期

Php 将cookie设置为永不过期,php,cookies,Php,Cookies,看看这个,我发现我可以为饼干设定一个有效期。您可以将cookie设置为在浏览器会话结束时或将来某个时间过期,但我看不到将cookie设置为永不过期的方法。这有可能吗?这是如何实现的?我认为没有办法让一块饼干永远保存下去,但你只需要将它设置为在遥远的将来过期,比如2100年。你不能,但是如果你将过期时间设置为现在+100年呢?你不应该这样做,而且这无论如何都不可能,如果需要,可以设置更大的值,例如提前10年 顺便说一句,我从未见过有这样要求的cookie:)所有cookie都会根据过期,因此这不是

看看这个,我发现我可以为饼干设定一个有效期。您可以将cookie设置为在浏览器会话结束时或将来某个时间过期,但我看不到将cookie设置为永不过期的方法。这有可能吗?这是如何实现的?

我认为没有办法让一块饼干永远保存下去,但你只需要将它设置为在遥远的将来过期,比如2100年。

你不能,但是如果你将过期时间设置为现在+100年呢?

你不应该这样做,而且这无论如何都不可能,如果需要,可以设置更大的值,例如提前10年


顺便说一句,我从未见过有这样要求的cookie:)

所有cookie都会根据过期,因此这不是PHP的限制

使用一个遥远的未来日期。例如,设置10年后过期的cookie:

setcookie(
  "CookieName",
  "CookieValue",
  time() + (10 * 365 * 24 * 60 * 60)
);

请注意,如果您在32位PHP中设置的日期超过2038年,则该数字将环绕,您将得到一个立即过期的cookie。

虽然这并不完全可能,但您可以执行类似于谷歌的操作,并将cookie设置为2038年1月17日或其他同样遥远的日期


实际上,你最好将你的cookie设置为10年或60*60*24*365*10,这应该比你的cookie所使用的大多数机器都要长。

我不确定,但浏览器关闭时cookie不会被删除吗?不知何故,我做了一个永不过期的cookie,chrome将过期日期识别为“在浏览器关闭时”…

我的特权阻止我在第一篇帖子上发表评论,因此它必须转到这里

当从当前日期起提前20年设置时,应考虑上述正确答案


2018年1月19日(20年)的cookie很可能会遇到2038年的问题,这取决于您最终运行的浏览器和/或版本。

设置一个遥远的未来绝对时间

setcookie("CookieName", "CookieValue", 2147483647);
最好使用绝对时间,而不是按照公认答案中的建议计算相对于当前的时间

与32位系统兼容的最大值为:

2147483647 = 2^31 = ~year 2038

难道你不能说是一个永无止境的循环,cookie以当前日期+1的形式过期,所以它永远不会到达它应该过期的日期,因为它总是在明天?有点过火,但只是说说而已

如果要永久保留客户端计算机上的数据,或者至少在浏览器缓存完全清空之前,请使用Javascript本地存储:


不要使用会话存储,因为它将像最大使用期限为零的cookie一样被清除。

最大值:2147483647

setcookie("CookieName", "CookieValue", 2147483647);
为避免整数溢出,时间戳应设置为:

2^31 - 1 = 2147483647 = 2038-01-19 04:14:07
设置更高的值可能会导致旧浏览器出现问题

另见:

以及:

如果缓存接收到的值大于最大正值 它可以表示的整数,或者如果它的任何年龄计算 溢出时,它必须传输值为的年龄标头 2147483648(2^31)

由于生活的不可预测性,我避免使用“从不”和“永远”这两个词

自1970年1月1日以来,可使用带符号的32位整数存储的最新时间是2038年1月19日星期二的03:14:07(1970年1月1日之后的231-1=2147483647)。这种限制称为


@sAc:为什么这是一件坏事?因为根据cookie规范,这无论如何都是不可能的。不能将其设置为永不过期。您可以使用
$cookie->setMaxAge(2147483647),它晚于2080,可在32位和64位上工作,但不一定是这样,如果您在cookie上设置了过期日期,它将在您关闭浏览器并重新打开后继续存在。如果未设置过期时间,则默认行为将在关闭浏览器时被删除。20亿很容易记住,但$forever的理想数字是2^31-1=2147483647,对应于2038年1月。正如@John所说,这是避免2038错误的整数溢出的最大值。请注意,当2018年到来时,如果我们不使用64位PHP,这将围绕32位整数,并以接近零的时间发送到客户端。(PHP上的25年Cookie现在正在发生这种情况。)在2018年(离现在只有5年了)回到这些评论会很有趣,因为每个人都在争先恐后地实施2018年的升级,20年后的2038年又将如此。希望到那时我们都能跳到64位万事通,这在2920亿年后的12月4日星期日292277026596不会成为问题。除非我们在我死前达到一个奇点,否则我想我不必担心那个。如果一个人在2037年底使用的是他们现在使用的同一台计算机。。。那太可悲了!我在2018年读到这篇文章,一时惊慌失措,然后意识到我没事。时间旅行者们好,我在2019年和你们说话。我们的星球已经改变了很多。我们正在宇宙中寻找地方来拯救我们的物种。与此同时,我们仍然使用cookies。不,因为这将超过2038年1月的最大值。这将一直持续到2028年初,此时您将溢出该值,cookies将停止工作。最好使用绝对值。假设他的代码在2028年仍在过时的机器上运行。。。不知怎的,我更担心每个人都会忘记更新固定日期。。。软件往往比硬件更长寿。事实上,他说得有道理。只要使用一些合适的“不活动期”,比如说3个月,然后在每次请求时用这个时间刷新cookie,就有一定的意义了。@StijndeWitt或仅仅10年。然后,如果用户在10年内访问,则更新它…我假设不想为防止多个条目而费心的唯一回答的民意测验的cookie具有此要求。看@
Max-Age=value
  OPTIONAL.  The value of the Max-Age attribute is delta-seconds,
  the lifetime of the cookie in seconds, a decimal non-negative
  integer.  To handle cached cookies correctly, a client SHOULD
  calculate the age of the cookie according to the age calculation
  rules in the HTTP/1.1 specification [RFC2616].  When the age is
  greater than delta-seconds seconds, the client SHOULD discard the
  cookie.  A value of zero means the cookie SHOULD be discarded
  immediately.
setCookie("name", "value", strtotime("2038-01-19 03:14:07"));