- PR -

session生成タイミングのコントロール

投稿者投稿内容
Takaishi
常連さん
会議室デビュー日: 2004/10/11
投稿数: 24
投稿日時: 2004-11-05 21:23
いつもお世話になっています。
Sessionに関する質問です。
現在、Webアプリケーションの認証処理を作成しており、以下のコードを利用しています。

if (session == null && request.getParameter("flag") != null) {
// ログインプロンプト表示
System.out.println("ログイン画面へ誘導");

RequestDispatcher dispatcher =
filterConfig.getServletContext().
getRequestDispatcher("/Login.jsp");
dispatcher.forward(request, response);
}

上記のコードでログイン画面に移った後、認証に成功したらsession取得、
とやりたいのですが、困ったことに上記のdispatcher.forward(request, response)のところで、
勝手にsessionが生成されてしまっています。
RequestDispatcherの仕様ということはないはずですが、なぜそうなってしまうのか分かりません。
原因、対処法など、情報をお持ちでしたら、ご教授ください。
sakura
会議室デビュー日: 2004/11/03
投稿数: 3
投稿日時: 2004-11-05 21:57
sessionの詳細については他の方の説明か、ご自分で調べていただくとして
HttpSession#isNew()とかは使えないでしょうか?

しかしそれを行っても
if (session == null && request.getParameter("flag") != null)
の条件では
request.getParameter("flag") != null
↑この部分をユーザが操作できてしまうので
意味ないです


もし私が同じ事をやる場合は
何らかのユーザオブジェクトをセッションに設定しておき
session.getAttribute("hoge")==null
||
!((Hoge)session.getAttribute("hoge")).isLogedIn()
であれば、所定のページに飛ばすとか・・・

[ メッセージ編集済み 編集者: sakura 編集日時 2004-11-05 22:00 ]

[ メッセージ編集済み 編集者: sakura 編集日時 2004-11-05 22:01 ]
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-11-05 22:50
引用:

HOGEさんの書き込み (2004-11-05 21:23) より:
困ったことに上記のdispatcher.forward(request, response)のところで、
勝手にsessionが生成されてしまっています。



これはどのような理由からそのようにお考えになったのですか?
Takaishi
常連さん
会議室デビュー日: 2004/10/11
投稿数: 24
投稿日時: 2004-11-06 00:20
YOU@ITさん

> これはどのような理由からそのようにお考えになったのですか?

listenerで捕まえたsessionCreatedのイベントをログ 出力しています。
ソース中にprint文を埋め込んで、細かく調べたところ
dispatcher.forward(request, response);
のタイミングで、sessionが生成されていることがわかりました。

なお、その後の調査で、forward先が静的なHTMLの場合、sessionは生成されないが、
forward先がJSPの場合は、sessionが生成されるという現象を確認しました。
そこで、いまは回避策として、JSPの冒頭でsession.invalidate()を実装しています。

これはRequestDispatcherの仕様なのでしょうか?それともバグ?
あるいはやはりアプリケーションの問題なのでしょうか?
アプリケーションのコードを疑って吟味してみましたが、
非常にシンプルな実装ですし、問題があるようには思えないのです。

何かご存じでしたら、ご教授ください。
よろしくお願いします。
Takaishi
常連さん
会議室デビュー日: 2004/10/11
投稿数: 24
投稿日時: 2004-11-06 00:27
sakuraさん

おっしゃるとおりですね。
アプリケーションで確実にコントロールできる方法で
制御するほうが優れたやりかただと思います。
sessionの問題はそれとして解決しておきたいのですが、
思わず別解を与えていただき感謝です。
ご教授いただいた方法を利用させていただきます。
ありがとうございました。
未記人
ベテラン
会議室デビュー日: 2004/08/21
投稿数: 70
投稿日時: 2004-11-06 00:43
引用:

HOGEさんの書き込み (2004-11-06 00:20) より:
forward先がJSPの場合は、sessionが生成されるという現象を確認しました。


単に、自分で意識せずにセッション作ってるだけですね。
Takaishi
常連さん
会議室デビュー日: 2004/10/11
投稿数: 24
投稿日時: 2004-11-06 01:03
未記人さん

>単に、自分で意識せずにセッション作ってるだけですね。

詳しく説明していただけますでしょうか?
ちなみにセッションはアプリケーションが「作る」ものではないですよね?
アプリケーションはコンテナが作ったセッションを
リクエストにバインドするだけだと理解していますが、
私の理解は間違っていますか?
また、自分で意識せずにそういうことをやってしまう場合というのは
例えばどういうケースでしょうか?
自分なりに調べたつもりですが、わかりません。
よろしくお願いします。
前川
常連さん
会議室デビュー日: 2004/04/27
投稿数: 38
お住まい・勤務地: 1DK
投稿日時: 2004-11-06 01:09
引用:

自分で意識せずにそういうことをやってしまう場合というのは
例えばどういうケースでしょうか?

session="false"が無いケース、です。詳しくは↓こちら。
http://www.atmarkit.co.jp/fjava/javafaq/jsp/jsp06.html

スキルアップ/キャリアアップ(JOB@IT)