- PR -

session IDを複数割り当てる方法

投稿者投稿内容
みきてぃ
会議室デビュー日: 2005/09/16
投稿数: 14
投稿日時: 2006-02-23 00:19
お世話になっております。

現在、Aという親の画面でBとCとCというように複数の画面を開ける仕様になっております。

Bの画面もCの画面もデータベースに検索することができ、現在は同一セッションIDです。

今回、Bの画面とCの画面(Cの画面とCの画面でも同様)で同時にデータベースへ検索を行っている時、Bの画面が検索中でCの画面が検索終了するとBの検索がクローズされてしまいます。

このことから、セッションIDを別にして検索をさせようと思っているのですが、セッションIDを複数割り当てる方法がわかりません。

いろいろ調べたところURLにセッションIDを記述するという方法があるようですが、C画面を複数開いたときには有効の策ではないと思っております。なので、「セッションIDを”ランダム”に複数割り当てる」ことで解決するのですが、方法がわかりません。

「JSPに記述する」・「TOMCATの設定」など「セッションIDを”ランダム”に複数割り当てる」方法がありましたらご教授ください。参考URLでも結構です。

よろしくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-23 02:44
検索条件(?)をセッションにひもつけないようにしてはいかがでしょうか。
みきてぃ
会議室デビュー日: 2005/09/16
投稿数: 14
投稿日時: 2006-02-24 07:25
回答ありがとうございます。

セッションに必要な個人情報を持たせているので、切ることはできないのですが、やはりこの問題の有効な解決策はないのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-24 08:20
うーんと、色々と解決策はあると思います。ぱっと思いつくのを。

・hidden で必要な検索キーを引き回す
よくあるパターンです。検索キーをセッションに格納しなければいけない理由はそれほどないでしょうし、
悪意のあるユーザがオカシナ検索キーでリクエストしても問題にならないでしょう。
・開く画面毎に個別のIDを持たせてセッションに格納する際の属性のキーにそのIDを付加する
まぁ、画面毎にサブセッションを持つイメージですね。

いまいち説明が下手ですがイメージできるでしょうか?
みきてぃ
会議室デビュー日: 2005/09/16
投稿数: 14
投稿日時: 2006-02-26 11:34
インギさん返信ありがとうございます。

>・開く画面毎に個別のIDを持たせてセッションに格納する際の属性のキーにそのIDを付加する まぁ、画面毎にサブセッションを持つイメージですね。


まさにこのことをやりたいのです。クッキーは有効にしておきたいのでURL Rewriting手法は使用できません。

インギさんのおっしゃる方法はどうやればよいのでしょうか?やはりCookieが有効の時に「A画面からBやC画面を開いたときに新しいセッションIDを割り当てる」というのは不可能なのでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-26 13:05
>インギさんのおっしゃる方法はどうやればよいのでしょうか?やはりCookieが有効の時に「A画面からBやC画
>面を開いたときに新しいセッションIDを割り当てる」というのは不可能なのでしょうか。
Cookieの仕組みは理解していらっしゃるでしょうか?
1. 画面Aを開くときに新しいセッションIDを与える
2. 画面Bでまた新しいセッションIDを与える
3. 画面Aのリンクをクリックして次の画面へ移動
とした場合、画面Aを使っていても画面Bを開くときに渡されたセッションIDを使うことになります。クッキーが上書きされてしまいますので。

なので、それぞれの画面にIDを持たせるのが無難ではないでしょうか。
まったく別の画面であれば同じ意味を持つ値でも違い属性名でセッションに渡しておけば良いですし。

そもそもセッションは1クライアントにつき1つ発行するものとして設計されたものです。
URLRewriting を利用して複数セッションを持たせよう、っていうのはかなり力押しの、イケてないソリューションだと思ってください。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-02-26 13:33
引用:

みきてぃさんの書き込み (2006-02-23 00:19) より:
今回、Bの画面とCの画面(Cの画面とCの画面でも同様)で同時にデータベースへ検索を行っている時、Bの画面が検索中でCの画面が検索終了するとBの検索がクローズされてしまいます。


これが良く分かりません。
検索がクローズされる、とはどういうことを指されているのでしょうか?
思うに、推測ですが、Java の Servlet(JSP) で初歩的な間違ったコーディングとしてありがちな、データーベースへの接続が、B と C で共有していて、C がクローズすると B にまで影響を与えるような作りになっているのではないでしょうか?
Servlet(JSP) はマルチスレッドで動くので、それを考慮する必要があります。
みきてぃ
会議室デビュー日: 2005/09/16
投稿数: 14
投稿日時: 2006-02-26 16:53
インギ様返信ありがとうございます。

セッションは1ユーザー1セッションにしておきたかったのですが、今回の「片方の画面の検索がクローズされてしまう」問題は同一セッションであることが原因ではないかと考え、セッションIDの操作が必要と思いました。

セッションについては詳しくなかったので、「親のA画面からB画面を開いたときに、A画面からB画面に引き継がれたセッションIDを変更させたい」と思っておりました。それはやはり無理のようですね。

インギ様のおっしゃられています、「画面ID」を持たせるというのは、JSP上に記述するのでしょうか?参考になるページ等ありましたら教えていただけると助かります。



unibon様返信ありがとうございます。

現在問題となっているデータベースへは現在調査中ですがセッションIDを見て情報を返していると思います。B画面もC画面もA画面から開いておりますので、同じセッションIDであると認識しております。

同じセッションIDを使用しておりますので、B画面C画面を同時検索している場合、どちらかが先に検索を終えるともう片方の画面も途中で検索が終わってしまうのではないかと思っております。

インギ様のおっしゃられております「画面ID等を属性として持たせる」方法も有効な方法だと思っておりますが、unibon様はなにか方法がおありであればご教授くださいませ。

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