2011-01-31 4 views
18

HttpCookie.ExpiresHttpCachePolicy.SetExpiresにDateTime.NowまたはDateTime.UtcNowを使用する必要がありますか?HttpCookie.ExpiresとHttpCachePolicy.SetExpiresでDateTime.NowまたはDateTime.UtcNowを使用する必要がありますか?

Cookies are sending 'GMT'時間ですが、GMT + 5になる場合はDateTime.Now.AddDays(3)を送信するとどうなりますか? Expires HTTP header (sec 14.21)と同じです。

どうすればよいですか?

答えて

16

この場合は関係ありません。

内部的には、最初に.SetExpiresは、提供された日時をUTCに変換してからクッキーに設定します。

念頭に置いてベア、限り、あなたの日時、消費者が正しくDateTimeクラスを使用して、2つが同じである - それはただ1つがUTCに「ベースライン」され、他方はありません:

20110701T14:00:00-1:00 (British Summer Time) 

20110701T13:00:00+0:00 (UTC) 

はまったく同じ日時、即ち13:00のUTCを表します。

消費者がこれを正しく扱う限り(リフレクターで見たと思われる)、それは違いはありません。

これを服用して時間文字列として渡すと、もちろん違いはありますが、この場合は違いがあります。

次のコードで効果を確認することができます(あなたがUTCにいないと仮定して、設定をテストするように変更した場合)。 UTCに変換するように要求すると、両方とも同じ日時を出力します。

WriteDateTime(DateTime.Now); 
WriteDateTime(DateTime.UtcNow); 

public static void WriteDateTime(DateTime dateTime) 
{ 
    Console.WriteLine(dateTime.ToUniversalTime().ToLongTimeString()); 
} 
+0

が完璧です。ありがとう! – vtortola

+2

DateTime.UtcNowはDateTime.Nowより高速ですので、これを使用することをお勧めします。 –

+0

この回答は間違っています。 DateTimeはオフセットを格納しないため、DateTime.NowとDateTime.UtcNowは非常に異なります。質問はブラウザが何を期待しているかに関係しており、正解は0オフセット(UTC)の値を期待していることです。正解は実際には以下の@Phil Carsonによって提供されるものです。 – Talon

1

Cookieに使用されている時間基準があるため、DateTime.UtcNowメソッドを使用する必要があります。 UTCはGMTと同等です。 MSDN: System.DateTime.UtcNow

から

は このコンピュータの現在の日付と時刻を設定されたDateTimeオブジェクトを取得し、協調 世界時(UTC)で表されます。

これらの間の説明については、thisを参照してください。

+0

私は知っています。問題は、MSDNのページでさえ、彼らはDateTime.Now http://msdn.microsoft.com/en-us/library/system.web.httpcookie.expires.aspxを使用し、それは私を悩ませているということです。 HttpCookie.Expiresが既にGMTに変換されている場合、彼らが気にしないかどうかは分かりません:P – vtortola

+0

-1 - これは正しいとは思わない - あなたが使う違いはありません。 –

+0

ロブ、技術的にどちらかを使用して、メソッドの実装のために働くことを指摘しているように。その他の考慮事項があります:SetExpiresメソッドの出力がUTC DateTimeなので、実装の明快さを示すUTC DateTimeを渡すなど、 –

関連する問題