- PR -

セッションの新規作成について

1
投稿者投稿内容
ひろし
会議室デビュー日: 2003/11/27
投稿数: 18
投稿日時: 2004-01-16 10:21
こんにちは。

セッション管理の際に使用するgetSessionメソッドは、

getSession()、getSession(true)の場合、
既にあればそれを返し、なければ作成する。
getSession(false)の場合、
既にあればそれを返し、なければnullを返す。

という動作をしますが、
現在のセッションが存在しても、そのセッションとは別の
新規セッションを強制的に作成する方法はありますか?

よろしくお願いします。
たーにゃ
会議室デビュー日: 2004/01/15
投稿数: 3
投稿日時: 2004-01-16 10:46
こんにちは。
invalidate()を呼び出せば現在のセッションを終了させることができますが、意図が違いますか?
ひろし
会議室デビュー日: 2003/11/27
投稿数: 18
投稿日時: 2004-01-16 11:04
そうですね。ちょっと意図が違います。
説明不足で申し訳ありません。

現在調査しているのは、ボタンを押す毎に新規ウィンドウを立ち上げて、
それぞれに新しいセッションを作る方法です。
で、ボタンのある親ウィンドウのセッションは
そのままにしておきたいということです。
ひろし
会議室デビュー日: 2003/11/27
投稿数: 18
投稿日時: 2004-01-16 23:11
こんばんは。
あまりレスを頂けないようですね・・・

「それは無理ないんじゃないの?」
というような意見でも構いませんので、
何らかの情報をお願い致します。
不可能なことを調べ続けてたら、空しいですし・・・
ぜひ。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-01-17 00:01
セッションの管理を Cookie ではなく URLRewriting で行うようにしてはいかがでしょう。
新しく開くウィンドウの URL を encodeURL しなければ opener のセッションを持続したまま新しいセッションを作れます。

たとえば WebLogic では weblogic.xml の CookiesEnabled パラメータを false に設定します。
http://edocs.beasys.co.jp/e-docs/wls/docs81/webapp/weblogic_xml.html#1038173
コード:
<weblogic-web-app>

<session-descriptor>
<session-param>
<param-name>CookiesEnabled</param-name>
<param-value>false</param-value>
</session-param>
</session-descriptor>
</weblogic-web-app>



あとは新しく開くウィンドウを別の Web アプリケーションにしてしまうという手もありますね。

[ メッセージ編集済み 編集者: インギ 編集日時 2004-01-17 00:02 ]
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2004-01-17 00:03
Javaについては詳しくないですのでJavaで可能かは分かりませんが、他の言語でこういうやり方をした、という事で返答を・・・

・立ち上げた窓ごとに、「ID」を付ける
(url?win_id=sess_1 とか <input type=hidden name=win_id value=sess_1> とか)
・セッションを配列にして、そこに納める。
(session["sess_1"][session_var1]="ほげほげ" ってな感じで)
(Javaではセッションを配列にできるのかな?そこが問題)

少しスマートでは無いですが、参考になれば・・・
Santa
会議室デビュー日: 2003/05/28
投稿数: 8
投稿日時: 2004-01-20 09:46
以前、この掲示板で同様の質問を見たような気がしますが...

一台のクライアントで複数のセッションを管理したいということですが、
おそらく皆さんが仰るように URLReWriting などの手法を用いて
自分でセッション管理ロジックを作成しなければなりません。

基本的に サーバー(コンテナ) は、Session-Id を
Cookie に保持する場合が多いと思います。
この Cookie は、クライアントのブラウザ(プロセス) ごとに管理されます。
従って、新しい Window を開く際に Applet などで
直接ブラウザの EXE (プロセス) を起動することが出来れば、
ご要望の要件を果たせる気がします。

 # IE の場合は、これで可能かと思いますが、
 # 他のブラウザの仕様(動作)については、未確認です。

ただこれには Applet からプログラムを起動(クライアントリソースへのアクセス)を許可するようセキュリティ設定を構成しなければなりませんし、
ブラウザのプログラム名 (IEならIEXPLORER.EXE) が
全てのクライアントで固定でなければいけません。

 # この方法はイントラのシステムなどの限られた環境で
 # 辛うじて可能であり、あまり現実的ではないような気がします。


私は以前に担当したシステムで、同じような要件があり、
散々「やりたくない」と言ったものの、
顧客に押し切られ、同一クライアント上(HttpSession)で、
独自Sessionを複数管理する仕組みを実装する羽目になりました。
どうもユーザーは VB などで作ったシステムと同じ感覚で、
どんどん画面が開くという操作が自然だと思っているようです。

 # どちらかというとホストと同じようなシンプルな画面で考えてもらえると
 # 設計・実装しやすいんですが... (^-^:wink:

実装方法は、既に例示されておりますように
HTML(JSP)上の Form ごとにこちらで採番した独自の Session-Id を割り当てます。
同じ 独自Session 上では同じ Session-Id を、
新しく Window (別の独自Session) を開く場合は、新しい Session-Id を割り当てます。

カスタムタグなどを作成して自動的に採番したり、
独自 Session 管理を特定のオブジェクトに委譲したりと
出来る限り使い勝手を考慮しましたが、
それでも結構泥くさい "つくり" にならざるをえませんでした。

私が担当したシステムでは、複数セッションを管理する以外
さほど複雑な要件はありませんでしたので、
特に問題は出ませんでしたが、
回避可能ならシンプルな設計がベターだと思います。

 # 二重送信などの要件がある場合、
 # Struts などのフレームワークでは、複数セッションを前提にしていないので
 # これらの仕掛けも独自に実装する必要があります。
 # まあ、何かと面倒くさいことになりそうで、お勧めしません。




[ メッセージ編集済み 編集者: ドリム 編集日時 2004-01-20 09:50 ]

[ メッセージ編集済み 編集者: ドリム 編集日時 2004-01-20 09:50 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-01-20 12:01
>一台のクライアントで複数のセッションを管理したいということですが、
>おそらく皆さんが仰るように URLReWriting などの手法を用いて
>自分でセッション管理ロジックを作成しなければなりません。
URLRewriting を用いたセッショントラッキングは大抵のコンテナに実装されてますので、
独自実装する必要はないですよ。
->Servlet Spec 2.3 - SRV7.1.3 にもトラッキング手法の一つとして記述されています
ですので、ブラウザ側か、APサーバ側でクッキーによるトラッキングを無効にするだけでいいと思います。
Tomcat では server.xml に以下のように設定するみたいです。
Tomcat3.2.x:
<RequestInterceptor
className="org.apache.tomcat.request.SessionInterceptor"
noCookies="true" />

Tomcat3.3:
<SessionId ... noCookies="true" ...

Tomcat4.x:
<Context ... cookies="false" ...

Struts からみれば Cookie を使おうが、URLRewriting を使おうが区別はありませんので、特別に考慮することもないかと。
1

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