• 締切済み

セッション情報の保持について

ログイン画面(https)より 1.ID、PASSを入力し、ログインする 2.JAVAで入力されたID、PASSをセッション変数にセット 3.メニュー画面(http)を開く。そのときセッション変数を  確認してNullの場合はログイン画面に戻る といったシステムを作成しています。 しかしSSLの問題なのか、ブラウザを開いて1回目のログイン時は メニュー画面を開いたときにセッション変数がNullになっています。 2回目以降は問題なく処理されるのですが... SSLでセッションがクリアされるとかいうことはあるのでしょうか? よろしくお願いします。 OS:FreeBSD 4.7 Apache:1.3.33

みんなの回答

noname#18558
noname#18558
回答No.5

ログインが成功してリダイレクトしてますが、 そこでもう一度ログイン画面が表示されるということですか? Loginでセッションが取得できなかったら、ログイン画面にリダイレクトしてるのですか? そこはhttpsですか?

AQUARIUS2005
質問者

補足

>Loginでセッションが取得できなかったら、ログイン画面にリダイレクトしてるのですか? >そこはhttpsですか? そうです。省略してしまいました。 セッションが取得できない場合はログイン画面にhttpsでリダイレクト(絶対パス)しています。

  • guest98
  • ベストアンサー率23% (4/17)
回答No.4

>セッション変数へセットしているサーブレットは >HttpSession session = request.getSession(true); >にしてあり、 ??sessionのチェックのときはfalseですよね? ごめんなさい、載せて頂いたソースのつながりがよく分かりません。

AQUARIUS2005
質問者

補足

わかりずらくて申し訳ありません... ログインページからログイン時、サーブレットを実行 ////////////////////////////////// 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)
回答No.3

HttpSession session = request.getSession(false); にしていませんか? falseを指定した場合、HttpSessionがないとnullが返されます。

AQUARIUS2005
質問者

お礼

回答ありがとう御座います。 セッション変数へセットしているサーブレットは 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"); 中略 } } となっています。

noname#18558
noname#18558
回答No.2

2回目とは、もう一度ブラウザを閉じて同じ動作をするということですか? もう少し詳しくお願いします。

AQUARIUS2005
質問者

補足

説明不足ですいません。 1.ブラウザを立ち上げ、ID,パスを入力しログイン(https) 2.メニューが開かれる(http)がセッションがNullの為再度ログインページに飛ぶ(同じブラウザ) 3.もう一度ログインし直す(https) 4.今度はセッションが入っているので通常のメニュー画面(http) 一度ブラウザを閉じてしまうと1からやり直しになってしまいます。 セッションへの登録は session.setAttribute("変数", 画面の値); こんな感じです。

noname#18558
noname#18558
回答No.1

試してないので分かりませんが、 おそらく httpsとhttpではドメインが変わるので、cookieのセッションIDが送られません。 なので、セッションが消えたように見えるのでしょう。 httpsからhttpへのリクエストだけURLリライティングを利用してみてはどうでしょうか。

AQUARIUS2005
質問者

お礼

回答ありがとう御座います。 >おそらく >httpsとhttpではドメインが変わるので、cookieのセッションIDが送られません。 >なので、セッションが消えたように見えるのでしょう。 なんで2回目以降は問題なく処理されるのでしょうか? 初心者で申し訳ありません...

関連するQ&A