Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

新規セッションについて

今、Struts-tomcat(4.1.40)にて開発を行っています。

ログインユーザの管理をセッションIDにて判別したいと思ってます。
フィルタにて判別するのですが、同一のログインIDだった場合はブラウザ側(Cookie)のセッションIDがサーバで保存したものと同一でないと操作できないようにしています。

一方がログイン状態(Aとします)で、別ウインドウを立ち上げ、同一のログインIDでログイン(Bとします)した際、セッションの振り直し(invalidate⇒再取得)をしているのですが、その際に同じブラウザだと、再取得の際に同じサイトなのでAからサーバに送信するセッションIDも変わってしまっているように見えます。

IE8に「新規セッション」というメニューがあり、これで新しいウインドウ(B)を開くとうまく別セッションと認識してくれ、Aは違うセッションIDと認識してくれるのですが、この動きを上記の際でも同じになるように実装したいです。

煮詰まってしまっていて、アドバイスが欲しいです。
よろしくお願いします。
(※初質問なんで、質問が分かりにくかったらすみません)

7

回答

83479

閲覧

7件の回答

評価

0

煮詰まってるんじゃなくて、行き詰まってるんだな。

標準のセッション管理だけではできない。

ログイン時にトークンを発行し(セッションにも保存し)、以降のリクエストには
常にそのトークンを自前で含める。
毎度そのトークンを、セッションに保存した値と比べる。
セッションIDを盗まれても、それだけなら成りすますことができない、という点も
ある。

評価

0

>$さん

ありがとうございます。
確かに行き詰ってます。苦笑

実は、制約がありまして・・・
ログイン・ログアウト時のアクションと、フィルタだけで実装しなければならないんですよ。。。
従って、トークンのように各画面/アクションに実装するとかが出来ないんですよね。。。

評価

0

ブラウザの各インスタンスを判別する情報は、自動では発生しないよ。
つまり、できない。

評価

0

>匿名さん

なるほど。
そうですよね・・・
IE8の「新規セッション」の挙動が気になってはいたのですが・・・

ありがとうございます。

評価

0

あれ、前回匿名で書いてたか。
ログイン保持が結構短いな…。

評価

0

「新規セッション」はブラウザの利用者が選ぶもので、Webアプリからは指定でき
ない。
総じてブラウザの挙動はブラウザの利用者の意思(設定)による、と考える必要が
ある。
例えば新規ウィンドウを開くリンクですら、ガイドラインでは好ましくないもの扱
いになっている。

評価

0

>$さん

いろいろありがとうございます。

ブラウザの挙動⇒ブラウザの利用者の意思=クライアント側
という考え方ですね。
サーバ側での対応は難しそうですね。

セッション発行時にセッションに対して何か明確に「新しいもの」と設定をすると、ブラウザ側が「新規セッション」と同じような動きをしてくれるような理想を描いてしまいました・・・

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。