1

localhost ではなくドメイン名からリクエストが送信された場合、セッション変数が使用できないという問題がありました。たとえば、ユーザー変数を設定した場合:

request.getSession(true).setAttribute("user", user);
//Redirects to another html page or something...

クライアントが別のリクエストを行い、ユーザー セッション変数にアクセスしようとすると、null が返されます。

//Client makes another request to the server
request.getSession(true).getAttribute("user"); //returns null

リクエストごとに、新しい JSESSIONID Cookie が設定され、ID 値が変更されることに気付きました。これは、クライアントがサーバーにアクセスするたびに新しいセッションが作成されるということですか? オブジェクトを HttpSession に格納してそれらにアクセスできるように、クライアント間で同じセッションを維持するにはどうすればよいですか?

これが何か関係があるかどうかはわかりませんが、Tomcat マネージャーからアプリケーションを表示すると、同じブラウザー ウィンドウからアプリケーションを使用しているという事実に関係なく、セッション カウントが増え続けています。ページか何か。サーバーへのリクエストごとに新しいセッションが作成されているという別の兆候はありますか?

これは、example.com/app などのドメイン名からアプリケーションにアクセスする場合にのみ発生します。localhost から来る場合、セッション変数は正常に機能します。

アップデート

response.sendRedirect を使用せずにテストしたところ、ページを切り替えてサーバーに別のリクエストを行うまでセッション変数を使用できました。これは、リクエストごとに新しいセッションが作成されているという私の疑いを裏付けています。セッションを強制終了するのはリダイレクトではなく、新しいリクエストです。これを防ぐにはどうすればよいですか?

4

2 に答える 2

0

リダイレクトはどうしていますか?事前に HttpServletResponse.encodeRedirectURL() を呼び出していますか?

ここでJavadocを読んでください

あなたはそれを次のように使用しますresponse.sendRedirect(response.encodeRedirectURL(path));

于 2013-09-28T14:11:22.320 に答える