- PR -

Cookieが使えない時のセッション管理について

1
投稿者投稿内容
naito
常連さん
会議室デビュー日: 2007/08/07
投稿数: 36
投稿日時: 2007-12-05 18:12
いつも御世話になっております。

今回はCookieが使えない(携帯)場合での認証後のセッション管理についてお聞きしたいのですが、認証はTOMCATのj_security_checkを使っています。
ファイル構成は、***/以下のファイルにアクセスしようとした場合にlogin.jspでフォーム認証後、そのページに飛ぶというような仕組です。


携帯電話などでアクセスした場合だと、Cookieが無効なために、session管理ができず、認証が成功しても、HTTPエラーが発生してしまいます。

これに対する方法を調べた結果、ジャンプ先のURLにそのままセッションIDを付加するという方法があったので試してみたいのですが、セッションIDが発行されるのは認証が成功してからだとすると、どの時点でrequest.getRequestedSessionId()のコードを埋め込むべきなんでしょうか?


長々とすみませんが、よろしくお願いいたします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-12-05 22:28
引用:

naitoさんの書き込み (2007-12-05 18:12) より:
これに対する方法を調べた結果、ジャンプ先のURLにそのままセッションIDを付加するという方法があったので試してみたいのですが、セッションIDが発行されるのは認証が成功してからだとすると、どの時点でrequest.getRequestedSessionId()のコードを埋め込むべきなんでしょうか?



セッションIDが発行されるのは、getSession()した時だけでなく、
FORM認証(j_security_checkの認証)を開始した時にも行われます。

自身のサーバに対するリンクやフォームなどのURLの出力を
HttpServletResponse.html#encodeURL()
エンコードするようにすればうまく行くはずです。

あと、このURLのエンコード処理は、StrutsやJSFなどの
フレームワークのタグを使えば勝手にやってくれます。

[補足]
encodeURL()は常に行っても通常は問題ありません。
セッションがまだ作成されていなかったり、
Cookieが利用可能な場合はURLを加工せずに返します。
[/補足]

[ メッセージ編集済み 編集者: あしゅ 編集日時 2007-12-05 22:34 ]
naito
常連さん
会議室デビュー日: 2007/08/07
投稿数: 36
投稿日時: 2007-12-06 14:49
あしゅ様

返事が少しおくれまして申し訳ありません。

encodeURLでうまくセッションIDの付加ができましたが、まだフォーム認証後、そのページへ飛ぶことができません。


index.jspでまずセッションIDが必要ならURLに付加し、制限のつけられているファイルにジャンプします。

<a href="<%= eURL %>">ログイン画面に移る</a><br>
eURLの値は、layer1/MobileTop.jsp;***のようにセッションIDが付加されていることを確認しています。

ジャンプ後、MobileTop.jspに移る前にlogin.jspのj_security_checkのフォーム認証に入ります。
ここで、認証後にエラーが発生してしまいます。

index.jspではなくlogin.jspで次のジャンプ先にセッションIDを付加しないといけないということでしょうか?
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-12-06 15:40
引用:

naitoさんの書き込み (2007-12-06 14:49) より:
ジャンプ後、MobileTop.jspに移る前にlogin.jspのj_security_checkのフォーム認証に入ります。


<form action="j_security_check" ...>
というようなフォームになっていると思うのですが、
このj_security_checkもencodeURL()していますか?
naito
常連さん
会議室デビュー日: 2007/08/07
投稿数: 36
投稿日時: 2007-12-06 15:42
追記しておきます。

不明な点は、login.jspへ遷移した時に、そこでまた新たなセッションIDが発行されているが、Cookieが無効なためにそのセッションを次の遷移画面で使えないことからエラーが発生原因なのかと自分では考えています。


index.jspでセッションを発行し、一応確認のため表示させているのですが、再読み込みするたびに値は変わっていることからそう判断しています。

そのため、index.jspで発行したセッションをログイン開始からログイン成功後も使いつづけることはできるのか、以上その2点が疑問点です。


よろしくお願いいたします。
naito
常連さん
会議室デビュー日: 2007/08/07
投稿数: 36
投稿日時: 2007-12-06 15:49
あしゅ様、御早い返事ありがとうございます。


actionのj_security_checkのところが抜けてました。
早速試してみたいと思います。
後ほどまた報告させていただきます。
naito
常連さん
会議室デビュー日: 2007/08/07
投稿数: 36
投稿日時: 2007-12-06 15:52
あしゅ様、先ほど指摘いただいた件、うまく動作いたしました。


j_security_checkにeURLを付加していない件が原因でした。
ありがとうございました。
naito
常連さん
会議室デビュー日: 2007/08/07
投稿数: 36
投稿日時: 2007-12-06 20:08
何度も失礼いたします。

今回、題名のような問題が発生し、Cookieが使用できない場合でのURLリライティングという方法でこの問題を対処できました。

その後、よく調べたのですが、ログイン前(TOMCATフォーム認証)にセッションIDを発行し、それをログイン後にも使用するということは危険ということがわかりました。

Cookieの必要なj_security_checkを用いたフォーム認証を用いていますので、ログイン前でのセッションID発行は絶対です。


この場合、何かよい対処方法はないでしょうか?
URLリライティングを行った後でどうするかという問題です。

ログイン後、invalidate()でセッションを破棄し、新たに発行するというほうほうでは、再びログイン画面に移ってしまい意味がありませんでした。


ページの作成環境はサーブレットとJSPを用いています。
PHPではログイン後に新たな引き継ぐためのID発行というsession_regenerate_id()があるようですが、Java、JSPで実現するためにはどのようにしたらよいでしょうか?

何かありましたら是非お願いいたします。
1

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