プロが教える店舗&オフィスのセキュリティ対策術

ASP.NET初心者です。(長文になります)

ASP.NET(VS2005。VB)で、作成したWebアプリがあるのですが、
セッション→ViewStateについて、いまいちピンとこない部分がありまして、質問させていただきました。

A画面には、コード入力のテキストボックスと、ボタンが用意されています。
ボタン_Clickのイベントで、入力したコードをSession情報に登録した後、
別ウィンドウでB画面がポップアップ表示されるイメージです。(画面遷移ではないです)
※A画面のボタン_clickイベント内で、
 「ScriptManager.RegisterClientScriptBlock(Me, Me.GetType, "popup", _
  "window.open(B画面URL,'_blank','height=600~~~');", True)」で、Pageのオブジェクトに登録して、
 B画面が起動されるイメージになると思います。

B画面では、Page_Loadイベント内の初回表示時「Not IsPostBack」のときだけ、
A画面で設定したSession情報を変数に設定した後、Session情報をクリアし、
変数に入れた情報をViewStateに登録して[ViewState(コード) = 変数に設定したコード]、
変数のコードを表示させています。
また、B画面は、自動で閉じるようにしたいのでTimerを使っています。
Timer_Tickイベントで、ViewStateに登録したコード取得して、値をDBに登録して、
B画面を閉じる、というのが一連の流れです。
ちなみに、A画面についてはB画面起動後、コード部分はクリアして、常駐しているイメージとなります。

そこで、気になるところが、
A画面でコード入力してボタン_Click→B画面表示→B画面を表示させたままA画面に戻って
コード入力してボタン_Click→B画面表示→B画面を表示させたままA画面に戻って・・・というように、
A画面から、何度も繰り返してB画面を起動させたとき、
A画面で設定したSession情報の内容で、B画面のTimer_Tickで、正しく登録されるのか、というところです。

ViewStateについて調べたところ、ページ単位で値を保持してくれる(違うページ間では共有しない)みたいなので、
ViewStateのクリアをしない限り&B画面を閉じない限り、値はそれぞれの画面で保持できているはず。
B画面の1つ目((1)とします)はコードが111の情報、2つ目((2))は222、3つ目((3))は333の情報を、
B画面それぞれのPage_Load時にViewStateに登録しておけば、
B画面(1)のTimer_Tickで111、B画面(2)のTimer_Tickで222、B画面(3)のTimer_Tickで333がそれぞれ登録できると思っています。

このように連続で行うような画面操作で、
A画面で設定したSession情報が上書きされたりする(111が222になってしまうなど)可能性は、あるのでしょうか?

A 回答 (1件)

> B画面では、Page_Loadイベント内の初回表示時「Not IsPostBack」のときだけ、


> A画面で設定したSession情報を変数に設定した後、Session情報をクリアし、

B画面でF5キーを押すだけで破綻しているのでは?

私見では、
画面間のデータ渡しでSessionは使うな。
QueryStringがお勧め(簡単に書き換えられるのでチェックは必須)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

F5キーにつきましては、
システム開発時の仕様というか、規約というか、
運用で、ファンクションキーは使用しない決まりになっていまして、
F5キー押下以降は、例外をスローするようになっています。
(基本、マウス操作のみで、画面再読み込みボタンの押下もNG)

QueryStringについても、書き換えられてしまったら困る、
という要望もあり、NGでした。

お礼日時:2010/12/13 19:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!