アプリ版:「スタンプのみでお礼する」機能のリリースについて

ログイン画面(https)より
1.ID、PASSを入力し、ログインする
2.JAVAで入力されたID、PASSをセッション変数にセット
3.メニュー画面(http)を開く。そのときセッション変数を
 確認してNullの場合はログイン画面に戻る

といったシステムを作成しています。
しかしSSLの問題なのか、ブラウザを開いて1回目のログイン時は
メニュー画面を開いたときにセッション変数がNullになっています。
2回目以降は問題なく処理されるのですが...

SSLでセッションがクリアされるとかいうことはあるのでしょうか?
よろしくお願いします。

OS:FreeBSD 4.7
Apache:1.3.33

A 回答 (5件)

試してないので分かりませんが、


おそらく
httpsとhttpではドメインが変わるので、cookieのセッションIDが送られません。
なので、セッションが消えたように見えるのでしょう。

httpsからhttpへのリクエストだけURLリライティングを利用してみてはどうでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。

>おそらく
>httpsとhttpではドメインが変わるので、cookieのセッションIDが送られません。
>なので、セッションが消えたように見えるのでしょう。

なんで2回目以降は問題なく処理されるのでしょうか?
初心者で申し訳ありません...

お礼日時:2006/02/02 17:47

2回目とは、もう一度ブラウザを閉じて同じ動作をするということですか?



もう少し詳しくお願いします。

この回答への補足

説明不足ですいません。

1.ブラウザを立ち上げ、ID,パスを入力しログイン(https)
2.メニューが開かれる(http)がセッションがNullの為再度ログインページに飛ぶ(同じブラウザ)
3.もう一度ログインし直す(https)
4.今度はセッションが入っているので通常のメニュー画面(http)

一度ブラウザを閉じてしまうと1からやり直しになってしまいます。

セッションへの登録は
session.setAttribute("変数", 画面の値);
こんな感じです。

補足日時:2006/02/02 18:12
    • good
    • 0

HttpSession session = request.getSession(false);


にしていませんか?

falseを指定した場合、HttpSessionがないとnullが返されます。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。

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

お礼日時:2006/02/03 10:13

>セッション変数へセットしているサーブレットは


>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)の設定はしておりません。

補足日時:2006/02/03 16:29
    • good
    • 0

ログインが成功してリダイレクトしてますが、


そこでもう一度ログイン画面が表示されるということですか?

Loginでセッションが取得できなかったら、ログイン画面にリダイレクトしてるのですか?
そこはhttpsですか?

この回答への補足

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

補足日時:2006/02/03 17:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!