所以我正在使用 Perl 的 CGI 模块创建 cookie,我是这样做的:
my $cookie = CGI::Cookie->new(-name => "$name",
-value => "$val",
-expires => "$expiration_date",
-path => $cookie_path,
-secure => 0
);
print "Set-Cookie: $cookie\n";
并且cookie是在浏览器中设置的,唯一的问题是时间与我设置的到期日期不匹配。例如,如果我将 +1d 设置为到期日期,它实际上会执行类似于 +1d 的操作 - 几个小时。我检查了我的系统时间,看看是否是问题所在,但我的系统时间是正确的。然后我打印出 cookie,我得到了这个:
Actual Time of cookie creation: 6/4/2012 12:10:02 PM
COOKIE: session_id=534fec49c864d8cf0325779b0921b6be1338829802484; path=/; expires=Tue, 05-Jun-2012 17:10:02 GMT
上面的诡异之处在于,我使用 perl 的“localtime(time())”函数记录了 cookie 创建的实际时间,但它记录的时间与我的 date 命令输出的时间不同(所以不是实际的当前时间) !然后cookie上的过期时间其实是对的,只是时区不对。
所以当我运行 date
命令时,我的服务器位于东部时区:
Mon Jun 4 12:05:12 EST 2012
但是,cookie 设置为 GMT 作为时区,我认为这是问题所在。除了 date
之外,我还应该在服务器上设置其他时间吗?如果有帮助的话,我正在 CentOS 5 上运行。谢谢!
最佳答案
这些时间实际上是相等的(美国东部标准时间 12:00 是格林威治标准时间 17:00)。请注意,规范要求使用 cookie 以 GMT 指定到期时间。反过来,您的浏览器需要自动将时区转换回来。
总之:一切都在按理说。
关于perl cookie 时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10888597/