2012-06-04 75 views
3

所以我使用Perl的CGI模塊創建的cookie,而我做的是這樣:perl的餅乾錯誤的時間

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 - 幾個小時的操作。我檢查了我的系統時間,看看是否是這個問題,但我的系統時間是正確的。然後,我打印出來的餅乾,我得到這個:

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 

以上strage的事情是,我記錄cookie創建的實際時間與Perl的「本地時間(時間())」的功能,但它記錄不同的時間比我的日期命令輸出(所以不是實際的當前時間)!然後cookie上的到期時間實際上是正確的,但它在錯誤的時區。

所以我的服務器是在東部時區,當我運行date命令:

Mon Jun 4 12:05:12 EST 2012 

但是,該cookie被設定爲GMT時區,我認爲這是問題。除了date之外,還有一次我應該在服務器上設置嗎?如果有幫助的話,我在CentOS 5上運行。謝謝!

回答

6

那些時間實際上是相等的(12:00 EST是格林威治標準時間17:00)。請注意,根據規範,Cookie需要以GMT格式指定到期時間。您的瀏覽器則需要自動將時區轉換回來。

有這麼多的話:一切都在發生,因爲它應該。

+0

哇,好吧,我不覺得愚蠢!所以即使在chrome中它說cookie是在2012年6月4日星期一下午5:08:09創建的,它會在2012年6月5日星期二下午1:10:02到期,並且我指定了過期日期的+1d,這就是正確?這似乎很奇怪,因爲那不是24小時的全部。 – srchulo

+0

@srchilo,再次,它是一個完整的24小時。 – ikegami

4
,但它記錄不同的時間比我的date命令拿出

這不是真的。

Tue, 05-Jun-2012 17:10:02 GMT 

Tue, 05-Jun-2012 12:10:02 EST 

是完全相同的時間不同的表示。這裏沒有問題。會有一個問題,如果你已經得到

Tue, 05-Jun-2012 17:10:02 EST 

Tue, 05-Jun-2012 12:10:02 GMT 

但你沒有。

GMT是因爲「EST」不明確而使用的—在澳大利亞有一個時區與—同名,因爲如果每個人都使用GMT,只需要知道一個時區而不是全部時區。