1

私の Webapp (で実行されているlocalhost/myApp/) では、次のような ajax 呼び出しがあります。

$.ajax({
    type: "GET",
    url: "http://localhost:8080/my.module/Login/login?user=abc&password=123",
    xhrFields: {
        withCredentials: true,
    },
    success: onResult,
    error: onError,
});

サーバーにログインします。ログインが成功し、応答に次のヘッダーも含まれている場合、サーバーはブール値で応答します。

Set-Cookie: JSESSIONID=167C57FA1E3529433938E744F7C4AC52; Path=/my.module

以前に設定された xhrField "withCredentials: true" を使用すると、ブラウザーは自動的に Cookie を処理し、後続のすべての要求に Cookie ヘッダーを追加します。

Cookie: JSESSIONID=167C57FA1E3529433938E744F7C4AC52

これは完全に正常に機能します。しかし、サーバーにバグがあるため、ログアウト インターフェイスを呼び出すときにセッションが削除されず、セッションを閉じることができない (そしてサーバーにアクセスできない) という問題があります。適切にログアウトするには、クライアントのセッション Cookie を削除して、サーバーから新しい Cookie を取得する必要があります。しかし、Cookie にアクセスしたり削除したりする方法が見つかりませんdocument.cookie。webapp で変数が空です。また、とからdocument.cookie変数を読み取ろうとしましたが、常に空です。私が試したもう1つのことは、Cookieを上書きすることでしたlocalhost/myApp/my.module/localhost/my.module/

document.cookie = "JSESSIONID=ABC; Path=/my.module";

ただし、サーバー要求には以前の Cookie が残っています。どうすれば削除できるか教えてもらえますか?

この解決策がハックであることはわかっていますが、それが私が探しているものです。なぜなら、サーバー プログラマーはバグを時間内に修正できず、そのようなハックをクライアントに実装するように私に依頼したからです。

4

1 に答える 1

1

「HttpOnly Cookie は、JavaScript による呼び出しなど、HTTP 以外の方法ではアクセスできません」 - http://en.wikipedia.org/wiki/HTTP_cookie#Secure_and_HttpOnly

まず第一に、クライアントの JavaScript は Cookie を気にするべきではありません。
サーバーがログイン要求を確認すると、新しい Cookie を作成し、Set-Cookie を呼び出します。
他の ajax リクエストを受信すると、サーバーはリクエストを処理する前に現在の Cookie を検証します。
ログアウト要求時に、(サーバーの) セッション情報から Cookie をクリアします。つまり、同じ Cookie を使用したクライアントからのそれ以降の要求は、サーバー ストアにないため失敗します。

于 2013-09-11T06:48:21.130 に答える