- PR -

ページ間のSessionを用いた値の受け渡しについて

1
投稿者投稿内容
yasu
会議室デビュー日: 2005/03/05
投稿数: 5
投稿日時: 2005-03-05 17:28
学校の課題研究でVB.NETを用いてWebショッピングのWebアプリケーションを開発しております。
そこでページ間のSessionを用いた値の受け渡しについて質問したいと思います。
以下のソースプログラムでは異なるクライアント(マシン)で実行した場合は値渡しが上手くいくのですが、同一ユーザで同じウィンドウを二つ開いて実行した場合は値渡しがなぜか上手くいかない(値が上書きされてしまう)のですが、なぜでしょうか?
もし分かる方がいれば教えて下さい。


<WebForm1.aspx.vb>
'フォームロード時・セッションキーを SessionKey1 としてセッション変数を作成
Session("SessionKey1") = "セッションオブジェクトで渡されたデータ"
'ボタンイベント
Response.Redirect("Webform2.aspx")

<WebForm2.aspx.vb>
'フォームロード時・セッション変数をテキストボックス2に表示
  Textbox2.Text=Session("SessionKey1").ToString
'ボタンイベント
  Session("SessionKey1") = Textbox2.Text
  Response.Redirect("Webform3.aspx")

<WebForm3.aspx.vb>
’ページロード時・テキストボックス2の値をセッション変数表示
  Textbox3.Text=Session("SessionKey1")
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-03-05 18:28
引用:

そこでページ間のSessionを用いた値の受け渡しについて質問したいと思います。
以下のソースプログラムでは異なるクライアント(マシン)で実行した場合は値渡しが上手くいくのですが


別のクライアントPCで同じSessionが使えたということ?
これの方がなぜだかわからないです。
どういう仕組みですか?

引用:

同一ユーザで同じウィンドウを二つ開いて実行した場合は値渡しがなぜか上手くいかない(値が上書きされてしまう)のですが、なぜでしょうか?
もし分かる方がいれば教えて下さい。


1つのクライアントPCでも、別インスタンスのIEだと、別Sessionになるんで不思議ではないです。
値が上書きされてました?
別の値だったのではないかと思います。

もう少しくわしく、実際の挙動をわかりやすく書いていただけるといいかもしれません。

_________________
たつごろー
codeseek
こみゅぷらす
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-03-05 20:13
基本的にSessionはブラウザのウィンドウごとに生成されます。

引用:

以下のソースプログラムでは異なるクライアント(マシン)で実行した場合は値渡しが上手くいくのですが



なのでこれは、ありえないと思います。

引用:

同一ユーザで同じウィンドウを二つ開いて実行した場合は値渡しがなぜか上手くいかない(値が上書きされてしまう)



これは正常な動作です。

ちなみにあるウィンドウからScriptを使用してwindow.openなどで別ウィンドを開いた場合
はSessionは共有されます。
yasu
会議室デビュー日: 2005/03/05
投稿数: 5
投稿日時: 2005-03-07 12:24
お返事どうもありがとうございます。少し分かりにくい説明ですいませんでした・・・。

ちなみに
「異なるクライアント(マシン)で実行した場合 」
というのは実際のウェブショッピングで異なるユーザが買い物をするという状況を想定した場合で

「同一ユーザで同じウィンドウを二つ開いて実行した場合」
というのは実際のウェブショッピングで同一ユーザがウィンドウを二つ開いて買い物をするという状況を想定した場合です(実際にはこういう買い方をするユーザはあまりいないかもしれませんが・・・)。

>別のクライアントPCで同じSessionが使えたということ?
別のクライアントPCでは同じSessionではなく、ちゃんと異なるSessionで扱われておりそれぞれのクライアントでの独立した値がそれぞれ次のページへ渡され、正常に動作しました。

「基本的にSessionはブラウザのウィンドウごとに生成されます。」
「1つのクライアントPCでも、別インスタンスのIEだと、別Sessionになるんで不思議ではないです。」
上記の二つの文言の通りやはり1つのクライアントPCでも、別インスタンスのIEだと、異なるSessionとして扱われるんですよね?
だったら同一ユーザで同じウィンドウを二つ開いて実行した場合は、例え同一ユーザでもSessionは別々のものとして扱われているので、値渡しは正常に動作するとは思うのですが、何度やってみてもなぜか値が上書きされ上手くいきませんでした・・・なぜでしょうか・・・?

ちなみに実際の動きを以下に説明しておきます。

<異なるユーザA、B>
        A    B
1ページ目 10  999
2ページ目 10  999
3ページ目 10  999

以上のように上手くいっています。


<同一ユーザA1(一つ目のウィンドウ)、A2(二つ目のウィンドウ)>

        A1   A2
1ページ目 10  999 @A1・値渡し決定ボタン AA2・値渡し決定ボタン
2ページ目 10  999 BA1・値渡し決定ボタン CA2・値渡し決定ボタン
3ページ目 10  10

(@〜Cは実行する順番を示しています。)

以上のようにBの処理によって値が上書きされ999が10になってしまいました・・・
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-03-07 12:39
yasuさん、こんにちは。

引用:

だったら同一ユーザで同じウィンドウを二つ開いて実行した場合は、例え同一ユーザでもSessionは別々のものとして扱われているので、値渡しは正常に動作するとは思うのですが、何度やってみてもなぜか値が上書きされ上手くいきませんでした・・・なぜでしょうか・・・?


別のウィンドウでも、同一のショートカットから起動されると、セッションを意図せず共有してしまったりします。
hira
常連さん
会議室デビュー日: 2004/05/07
投稿数: 33
投稿日時: 2005-03-07 12:54
あと、IEでは、
ファイル→新規作成→ウィンドウでも
Window.OPENと同じ挙動をし、
セッションが共有されるようです。
yasu
会議室デビュー日: 2005/03/05
投稿数: 5
投稿日時: 2005-03-07 14:49
お返事どうもありがとうございます。

「IEでは、 ファイル→新規作成→ウィンドウでも Window.OPENと同じ挙動をし、 セッションが共有されるようです。」
「別のウィンドウでも、同一のショートカットから起動されると、セッションを意図せず共有してしまったりします。」

なるほどそういうことだったんですね。確かに「ファイル→新規作成→ウィンドウ」の方法でウィンドウを二つ開いて実験しておりました・・・。それでsessionを共有してしまい上書きされると言う現象が起こっていたわけですね・・・。
それが良い証拠に(上記の方法でなく)ブラウザを個別に起動させて実験したところ値が上書きされずに上手く動作しました。
ということは実際の購入画面では
「同一ユーザでウィンドウを二つ起動して買い物をする場合は個別にブラウザを起動して下さい。「ファイル→新規作成→ウィンドウ」という方法では起動させないで下さい。」
という注意書きをしておく必要があるようですね・・。

今回の質問で色々勉強になりました。回答して下さった皆様本当にありがとうございました。
また機会があれば質問したいと思います。
1

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