1

ログインページを作りました。ユーザーがログインすると、API へのリクエストが送信されます。この API は PHP であり、ユーザー名とパスワードをチェックします。両方が正しい場合、一意のキーが返送されます (これは、後で使用するためにデータベースに配置されます: ユーザー ID および Web サイトで必要なその他のもの)。そのキーが送り返された後、Cookie に配置されます。

$.cookie("session", JSON.stringify(result));

Cookie が設定された後、ユーザーを新しいページに送ります。

location.href = 'dashboard.htm';

このページでは、jQuery は Cookie「セッション」が存在するかどうかをチェックします。そうでない場合、ユーザーはログイン ページに戻されます。

sessionId = ($.cookie("session") ? JSON.parse($.cookie("session")).SessionId : 0);
return sessionId;

これは Chrome では問題なく動作しますが、IE (8/9) ではこれに問題があります。dashboard.htm にアクセスすると、セッションが存在することがわかりました。F5 を押すとすぐにセッションが終了します。また、Cookie がまったく設定されていない場合もあります。

なぜこれがIEで起こっているのか理解できないようです。誰かアイデアはありますか?その一意のキーを保存するための他のオプション/アイデアも大歓迎です。

前もって感謝します。

4

2 に答える 2

1

考えられるアイデア/試してみたいことのリスト。長年にわたって収集されたいくつかの情報!

また、Cookie コードが Cookie をリセットしていないことを 100% 確認する必要があります。私はそれをしました、そして私は他の人がしたことを知っています。私たちのコードではないことを誓いますが、最終的にはそうなる場合があります;)

アンダースコア (_) やハイフン (-) などの特殊文字を Cookie 名に使用しないでください。IEはそれらを好きではなく、時にはうまくいくこともあればうまくいかないこともあります。

Cookie の有効期限が非常に遠い日付に設定されていることを確認してください。ブラウザーは、コンピューターの現地時間を使用して、Cookie がまだ使用可能かどうかを確認します。コンピュータの日付と時刻が正しくない場合、このような問題が発生する可能性があります。

正しいドメイン名の Cookie を設定していることを確認してください。path.example.com の Cookie を設定し、bob.example.com からアクセスしようとする人を見てきました。クロス ドメイン ポリシーにより、これは機能しません。

Javascript 経由で Cookie にアクセスしようとしている場合は、httponly フラグが true に設定されていないことを確認する必要があります。このフラグは、Javascript による Cookie へのアクセスを 100% 防止します。

iframe またはフレームセットで Cookie を設定する場合、サーバーに P3P ポリシーが必要になる可能性が高くなります。IE のサポートを計画している場合は、おそらく誰かが 1 人いるはずです。詳細については、http://en.wikipedia.org/wiki/P3Pをご覧ください。

P3P ポリシーを設定するための HTACCESS の例:

<IfModule mod_headers.c>
    Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
</IfModule>

Cookie を監視するには、Chrome のインスペクタを使用することをお勧めします。[ネットワーク] タブでリクエストをクリックすると、すべての Cookie を表示できる [Cookies] タブなどのタブが表示されます。

于 2012-12-16T08:13:07.117 に答える
1

スティーブンの答えの一部かもしれませんが、クッキーのいくつかの関数を見つけて書き直しました。

function setCookie(name, value, days) {
if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    var expires = "; expires=" + date.toGMTString();
}
else var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
}

Cookie を取得するには:

function getCookie(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;
}

これは私にとって少しうまくいきます。

iFrame のある部分として: 修正済み。Cookie が再び見つかる可能性があり、ajax 呼び出しを json から jsonp に変更しました。

Steven からのいくつかのヒントとともに、すべてが IE で正常に動作するようになりました。Chromeでさえ、実行する必要があることを取得します:)

于 2012-12-16T11:01:15.893 に答える