8

Cookie の有効期限を指定できるヘッダー Max-Age があります。残念ながら、Internet Explorer 6、7、8、およびおそらくそれ以降は Max-Age をサポートしておらず、GMT の絶対日付を含む Expires ヘッダーが必要です。

特定のクライアントの GMT 時間と TZ 設定が正しくないことは珍しくありません。タイムゾーンを正しく定義していないユーザーを考えて、時計を手動で調整します。

それ以上に、ユーザーが気付いていない数分の重大なクロック スキューが存在する場合があります。

その場合、GMT 時間が数時間ずれる場合があります。効果的には、サーバーが短い有効期限を必要とする Cookie設定するのを防ぎます。TZ が正しくない場合、最大有効期間が 10 分の Cookie は設定されないことを考慮してください。

問題を解決する方法に関する独自のアイデア (機能しない、または問題がある):

  1. もちろん、Max-Age を使用するか、すべてのブラウザが「Expire」部分を無視するため、両方を指定するのが最善ですが、IE では機能しません。
  2. 私が考えた別の方法は、 Date: ヘッダーを設定することです.うまくいけば、IEは時計のずれを回避するために差を計算することを知っているでしょう.しかし、それはIEを助けません.
  3. 要求時に (JavaScript を使用して) クライアントから時刻を取得し、時計の差を計算してから、必要に応じて Expire ヘッダーを調整します。ただし、時間をサーバーに送信する方法など、複雑なデータ操作が必要です。

質問:

  1. IE で Cookie の有効期限を処理するための最善かつ一般的な方法は何ですか?
  2. アプリケーションでどのように行うのですか
4

4 に答える 4

5

私がしたことは、時間管理をサーバー側にシフトすることでした.クライアント側で時間を確認することはできませんが、サーバーが決して嘘をつかないことを知っています.

  • サーバーで最初のリクエストが発生した時刻を保持し(クライアントごとにデータを送信するときにサーバー時間を保持します)、最大有効期限のCookieを設定します。つまり、01/01/2900です。
  • あなたはその時間を追跡し、たとえば10分のサーバー時間で、それを殺す時間を決定します.
  • 次に、最小日付を持つように Cookie を設定します。つまり、1900 年 1 月 1 日です。Cookie の削除 :
    http://msdn.microsoft.com/en-us/library/ms178195(v=vs.100).aspx
于 2013-05-16T09:37:22.363 に答える
2

この種の要件があれば、アプリケーションで Cookie を管理します。Cookie のコンテンツにサーバー時間の有効期限のタイムスタンプを含め、Cookie を暗号化またはハッシュで保護し、Cookie のタイムスタンプが過ぎている場合は Cookie を拒否します。

これは、自動ログイン Cookie の有効期限が強制される方法とほとんど同じです。

于 2013-05-16T07:13:39.727 に答える