perl cookie 时间错误

标签 perl cookies time timezone

所以我正在使用 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/

相关文章:

cookies - 如何在 Selenium 中的 open() 之前创建 cookie

php - 如何停止 Gravatar 设置 cookie

javascript - 计算2次的差值

java - 如何从当前时间的开放时间开始/关闭

ios - 比较没有时间分量的 NSDates

perl - 在 Perl 中 typeglobs 可以作为引用的原因

perl - 使用 Win32::Env perl 模块,环境变量不会在 Windows 中永久设置

mysql - 无法找出 perl DBI 中的占位符

mysql - fork 还是不 fork ?

php - 如何制作 Accordion 菜单并在cookie中保存位置(包含代码)