- 締切済み
セッション情報の保持について
ログイン画面(https)より 1.ID、PASSを入力し、ログインする 2.JAVAで入力されたID、PASSをセッション変数にセット 3.メニュー画面(http)を開く。そのときセッション変数を 確認してNullの場合はログイン画面に戻る といったシステムを作成しています。 しかしSSLの問題なのか、ブラウザを開いて1回目のログイン時は メニュー画面を開いたときにセッション変数がNullになっています。 2回目以降は問題なく処理されるのですが... SSLでセッションがクリアされるとかいうことはあるのでしょうか? よろしくお願いします。 OS:FreeBSD 4.7 Apache:1.3.33
- みんなの回答 (5)
- 専門家の回答
みんなの回答
ログインが成功してリダイレクトしてますが、 そこでもう一度ログイン画面が表示されるということですか? Loginでセッションが取得できなかったら、ログイン画面にリダイレクトしてるのですか? そこはhttpsですか?
- guest98
- ベストアンサー率23% (4/17)
>セッション変数へセットしているサーブレットは >HttpSession session = request.getSession(true); >にしてあり、 ??sessionのチェックのときはfalseですよね? ごめんなさい、載せて頂いたソースのつながりがよく分かりません。
補足
わかりずらくて申し訳ありません... ログインページからログイン時、サーブレットを実行 ////////////////////////////////// public class Serv_Login extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html; charset=Shift_JIS"); HttpSession session = request.getSession(true); /* コードを取得 */ String strCD = request.getParameter("cd"); session.setAttribute("cd", strCD); 中略 response.sendRedirect(response.encodeURL(メニュー画面の絶対パス)); } } ////////////////////////////////// メニュー画面開くとき以下のVAVA関数を実行 ////////////////////////////////// public class Login { public void chkLogin(HttpServletResponse response, HttpSession session, String strJumpPage) throws Exception { /* セッション変数より取得する */ String strCD = (String)session.getAttribute("cd"); /* ↑取得できない↑ */ 中略 } } ////////////////////////////////// チェックの時は特に(false)の設定はしておりません。
- guest98
- ベストアンサー率23% (4/17)
HttpSession session = request.getSession(false); にしていませんか? falseを指定した場合、HttpSessionがないとnullが返されます。
お礼
回答ありがとう御座います。 セッション変数へセットしているサーブレットは HttpSession session = request.getSession(true); にしてあり、 セッション変数を取得しているJAVAは public class Login { public void chkLogin(HttpServletResponse response, HttpSession session, String strJumpPage) throws Exception { /* セッション変数より取得する */ String strCD = (String)session.getAttribute("cd"); 中略 } } となっています。
2回目とは、もう一度ブラウザを閉じて同じ動作をするということですか? もう少し詳しくお願いします。
補足
説明不足ですいません。 1.ブラウザを立ち上げ、ID,パスを入力しログイン(https) 2.メニューが開かれる(http)がセッションがNullの為再度ログインページに飛ぶ(同じブラウザ) 3.もう一度ログインし直す(https) 4.今度はセッションが入っているので通常のメニュー画面(http) 一度ブラウザを閉じてしまうと1からやり直しになってしまいます。 セッションへの登録は session.setAttribute("変数", 画面の値); こんな感じです。
試してないので分かりませんが、 おそらく httpsとhttpではドメインが変わるので、cookieのセッションIDが送られません。 なので、セッションが消えたように見えるのでしょう。 httpsからhttpへのリクエストだけURLリライティングを利用してみてはどうでしょうか。
お礼
回答ありがとう御座います。 >おそらく >httpsとhttpではドメインが変わるので、cookieのセッションIDが送られません。 >なので、セッションが消えたように見えるのでしょう。 なんで2回目以降は問題なく処理されるのでしょうか? 初心者で申し訳ありません...
補足
>Loginでセッションが取得できなかったら、ログイン画面にリダイレクトしてるのですか? >そこはhttpsですか? そうです。省略してしまいました。 セッションが取得できない場合はログイン画面にhttpsでリダイレクト(絶対パス)しています。