3

jQueryモバイル、クライアント側でJS、サーバー側でJavaを使用するiPhoneアプリのログアウト機能を実装しようとしています。現在、私がしなければならないことは、Cookie をクリアして、index.html の #loginpage タグにリダイレクトすることです (さまざまなページに複数のタグがある HTML ファイルが 1 つしかありません)。clearCookie に対して現在行っていることは次のとおりです。

Cookie readCookie = null;
for (Cookie cookie : httpRequest.getCookies()) {
    if (cookie.getName().equals("CookieForLogin")) {
        readCookie = cookie;
        break;
    }
}

readCookie.setMaxAge(0);
httpResponse.addCookie(readCookie);

しかし、このコードは Cookie をクリアしていません。私はJSの方法を試しました。つまり、有効期限をネットで指定された以前の日付に設定しましたが、それらも機能しませんでした。また、 の応答方法もありませんHttpServletResponse。クライアント側で設定された Cookie をクリアする方法と、特定のタグにリダイレクトする方法を教えてください。

4

3 に答える 3

5

Cookie は特定のパスに関連付けられています。Cookie の削除中は、Cookie の作成時と同じパスを設定する必要があります。デフォルトでは、URL で現在要求されているフォルダーになります (したがって、同じフォルダーまたはそのすべてのサブフォルダーでのみ使用できます)。パスを明示的に指定することをお勧めします。そうしないと、URL で現在要求されているフォルダーに依存します。Cookie パス情報は maxage のようなものです。つまり、リクエスト Cookie ヘッダーでは使用できません。

次のように Cookie を作成したとします。

Cookie cookie = new Cookie("CookieForLogin", cookieForLogin);
cookie.setPath("/somePath");
cookie.setMaxAge(maxAgeInSeconds);
// ...
response.addCookie(cookie);

次のように削除する必要があります。

Cookie cookie = new Cookie("CookieForLogin", null);
cookie.setPath("/somePath");
cookie.setMaxAge(0);
// ...
response.addCookie(cookie);

これ/somePathは単なる例です。/どちらの場合も同じである限り、単に使用することもできます。

同じことが CookieのSecureフラグとHTTP-onlyフラグにも当てはまることに注意してください。trueCookie の作成時に最初に に設定した場合はtrue、Cookie の削除時にも に設定する必要があります。つまり、デフォルトはfalseです。

とはいえ、ログインしたユーザーを Cookie として保存することがどのように役立つかはわかりません。基本的に、エンドユーザーがその値を操作できるようにもしています。代わりに、ログインしたユーザーをセッション属性として保存し、session.invalidate()ログアウト時に呼び出します。

于 2013-04-12T14:34:08.557 に答える
0

getMaxAge

public int getMaxAge() この Cookie の最大経過時間を秒単位で取得します。デフォルトでは -1 が返されます。これは、ブラウザがシャットダウンするまで Cookie が保持されることを示します。

戻り値: Cookie の最大存続期間を秒単位で指定する整数。負の場合、ブラウザがシャットダウンするまで Cookie が存続することを意味します。 関連項目: setMaxAge(int)

//Java API ドキュメント

つまり、Cookie age を設定する必要があります。

A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits. 
A zero value causes the cookie to be deleted.

 Cookie killMyCookie = new Cookie("mycookie", null);
 killMyCookie.setMaxAge(0);
 killMyCookie.setPath("/");
 response.addCookie(killMyCookie);
于 2013-04-12T18:29:01.380 に答える