2013-05-07 6 views
8

Cookieの有効期限を指定できるMax-Ageヘッダーがあります。残念ながら、Internet Explorer 6,7,8は、おそらくMax-Ageをサポートしておらず、ExpiresヘッダーにGMTの絶対日付を必要とします。Set-Cookie:Expireプロパティ、Clock Skew、Internet Explorerの問題

GMT時刻とTZ設定が特定のクライアントで間違っていることは珍しくありません。自分のタイムゾーンを正しく定義しておらず、時計を手動で調整したユーザーを考えてみましょう。

それ以上のことがあると、時には、ユーザーが気づいていない多くの分の重大なクロックスキューが発生することがあります。

そのような場合、GMT時間は数時間にシフトすることがあります。効果的にはサーバーからのいずれかの短い有効期限を必要とするのCookieを設定することを防止します。 TZが間違っていれば、最大10才のクッキーが決して設定されないと考えてください。この問題を解決する方法について

オリジナルのアイデア(それが仕事をしたり、問題ありません):もちろん

  1. 最高の最大エイジを使用したり、すべてのブラウザが期限切れ」無視するとして、両方を指定することです"部分 - それはIEで動作しません
  2. 私は考えて別の方法は、日付:ヘッダーうまくいけばIEは、クロックスキューを回避するために違いを計算することを知っているだろう...しかし、それはIEに役立ちません。
  3. (JavaScriptを使用して)リクエスト時にクライアントから時刻を取得し、クロック差を計算し、必要に応じてExpireヘッダーを調整します。ただし、サーバーに時間を送信するなど、複雑なデータ操作が必要です。

質問:

  1. IEでクッキーのための時間を期限切れに処理するために最善かつ一般的な方法は何ですか?
  2. あなたは誰とアプリケーション
+0

_説明された条件の下で解決するのが難しい "_最長10分間のクッキーを考えてください。私はむしろ_server-side_時間を値が有効と見なされるまでクッキーに保存したい(そしてそれは長い時間枠のために設定する) - あなたがまだそのクッキーを受け取ったときにサーバー側をチェックすることができる何かのためにその価値を使用したいと思っていますか... – CBroe

+0

私は10分がちょっとしたことを理解しています。しかし、たとえ30分が必要な場合でも、それでも大きな問題になる可能性があります。 – Artyom

+0

一般的に、セッションクッキーを設定するのは、ブラウザが終了するまで続きます。または、クッキーを有効期限の日または年に設定して将来的にタイムゾーンの問題には問題はありません。 –

答えて

8
  • セットマックス年齢でそれをどのように行うのですが、Microsoftはそれを理解しています。
  • IEでのみ動作するJavascriptを追加して、ブラウザの時計に従ってMax-AgeをUTCに変換し、Cookieの有効期限を設定します。 JavaScriptはクッキー内のMax-Ageセットを読み取ることができないので、他のオプションと一緒にその情報をJavaScriptに提供する必要があります。そして、QuirksMode

    function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
        var c = ca[i]; 
        while (c.charAt(0)==' ') c = c.substring(1,c.length); 
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
    } 
    

    から

あなたはどこからクッキーnamemaxAgeotherOptions(例えば、パス、ドメイン)を取得した後:

var date = new Date(); 
date.setTime(date.getTime() + (maxAge * 1000)); 
document.cookie = name + "=" + readCookie(name) + 
    '; expires=' + date.toUTCString() + otherOptions 
2

私は要件のこの種を持っていた場合、私は私のアプリケーションでクッキーを管理します。サーバ時間は、クッキーの内容にタイムスタンプを期限切れにし、クッキーを暗号化またはハッシュで保護し、クッキーのタイムスタンプが経過した場合にはクッキーを拒否します。

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

5

私がしたことは、サーバー側に時間を移すことでした。クライアント側の時間は絶対にわかりませんが、サーバーは決して嘘をつきません。

  • あなたは(あなたがクライアントごとにデータを送信するとき サーバーの時間を保つ)最初の要求がサーバー上で起こっていることの時間を維持し、あなたは 最大日付の有効期限すなわちとクッキーセット:2900年1月1日を。
  • あなたはその時間を追跡して、サーバ時間を10分と言うことがあります。 あなたはそれを殺す時間を決めます。
  • 次に、最小の日付になるようにCookieを設定します。すなわち01/01/1900 は、クッキーの削除:ちょうどFYI
    http://msdn.microsoft.com/en-us/library/ms178195(v=vs.100).aspx
0

を、IE 11は、バージョン11.0.15063.0で始まるCookieにマックス・年齢をサポートしています。

私はこれを報告するためにMicrosoftからドキュメントを見つけることはできませんが、開発中に私たちのローカルバージョンのIEが動作していることがわかりましたが、顧客はありませんでした。 IEのバージョンとCookieのMax-Ageプロパティの違いに絞り込んだ。

関連する問題