10

我需要使用 PHP setcookie 函数设置 1 小时后过期的 cookie。我服务器上的时区设置为 GMT。我应该如何设置 cookie 到期日期,以使其在不同客户端的浏览器时区中工作?

4

4 回答 4

9

据我所知,客户时间是多少无关紧要。PHP 根据 unix 时间码设置过期时间。该时间的任何变化都应与服务器有关。

这是setcookie()的PHP 手册的摘录:

到期:

cookie 过期的时间。这是一个 Unix 时间戳,因此是自纪元以来的秒数。换句话说,您很可能会使用 time() 函数加上您希望它过期之前的秒数来设置它。或者你可以使用 mktime()。time()+60*60*24*30 将设置 cookie 在 30 天内过期。如果设置为 0 或省略,cookie 将在会话结束时(浏览器关闭时)过期。

于 2012-04-19T13:07:46.820 回答
5

PHP 的 setcookie() 函数接受一个对应于 Unix 时间戳值的整数。如果您的 cookie 应该有 1 小时的生存时间,您可以使用 time() + 3600 作为该值。然后 PHP 将创建一个带有过期时间的 cookie,例如“expires=Fri, 3 Aug 2001 20:47:11 UTC”。它采用 UTC (GMT),因此您不必担心客户端浏览器的时区

于 2012-04-19T15:59:09.860 回答
0

你可以试试看getTimeZone这里setTimeZone

strtotime似乎也可以检索正确的日期时间格式,然后您可以使用gmdate进行转换

于 2012-04-19T13:02:42.517 回答
0

好吧,假设您使用 set cookie。

我可能错了,但我认为:

您将 expire 参数作为 Unix 时间戳提供,并将时间戳计算为“一小时内”,因此您希望 cookie 在一小时内过期。所以不要关心时区,因为 unix 时间戳是明确的。

然后浏览器的任务是根据 Bowser 设置(区域设置、语言等)翻译日期中的 unix 时间戳

于 2012-04-19T13:11:39.120 回答