• 締切済み

SessionとViewStateについて

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になってしまうなど)可能性は、あるのでしょうか?

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

> B画面では、Page_Loadイベント内の初回表示時「Not IsPostBack」のときだけ、 > A画面で設定したSession情報を変数に設定した後、Session情報をクリアし、 B画面でF5キーを押すだけで破綻しているのでは? 私見では、 画面間のデータ渡しでSessionは使うな。 QueryStringがお勧め(簡単に書き換えられるのでチェックは必須)

yukky_55
質問者

お礼

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

関連するQ&A

  • IEの[新規作成(N)]→[ウィンドウ(W)]によるセッション管理。

    お世話になります。 只今、ASP.NET(VB.NET)アプリケーションを製造しています。 ログイン情報などをセッションで管理しているのですが、IEの[ファイル(F)]→[新規作成(N)]→[ウィンドウ(W)]で新規にブラウザを表示すると同じ画面が表示されSession情報が共有されます。更にViewState情報も表示元のViewState情報がコピーされたような状態になってしまいます。 [ファイル(F)]→[新規作成(N)]→[ウィンドウ(W)]で新規にブラウザが開かれた際に「新たにSessionが確立される。」または新規で開かれたブラウザだと判断する事は可能でしょうか?? なお新規にブラウザが開かれた際には、サーバサイトのPage_Loadイベントは発生していませんでした。Bodyタグのonloadには反応しました。 非常に困っております。ご教授願います。

  • 検索フォームのセッション管理について

    PHPを利用して検索フォームから入力された値を取得し、 条件にあった画面を表示しているのですがページを戻る際に警告が出て うまく戻れません。 流れ 1,フォームから値の取得 ⇒  2,送られた値を【$a】で受け取り、セッション変数に代入、条件にあったデータの表示(select * from sample where aaa like【$a】) ⇒  3,もしフォームの値が空でセッション変数に値があれば、セッション変数を【$a】に代入し条件にあったデータの表示 ⇒  4,フォームの値、セッション変数共に空ならセッション変数を削除し、他のページに飛ばす 5,新たにフォームから値が送られた場合は値を上書きする 以下が書いたコードです。 session_start(); if(isset($_POST["test"])){ $a = $_POST["test"]; $_SESSION["test"] = $a; }elseif($_POST["test"] == "" and isset($_SESSION["test"])){ $a = $_SESSION["test"]; }else{  unset( $_SESSION["test"] );  if (isset($_COOKIE["PHPSESSID"])) {   setcookie("PHPSESSID", '', time() - 1800, '/');  }  session_destroy();  header( "Location: /top.html" );  exit(); } 以下で【$a】を使いsql文を組み立て、データを表示しています。 このコードだと前のページに戻る際firefoxでは 【このページを表示するにはフォームデータを再度送信する必要があります。フォームデータを再送信すると以前実行した検索、投稿や注文などの処理が繰り返されます。】 と表示され、IEでも 【警告 : ページの有効期限切れ 要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。 情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。】 と表示されてしまいます 上記のコードをどのように変更すれば警告をださず行いたいことに記述したようにできるのでしょうか? ご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セッション変数が表示されない

    ●質問の主旨 セッション変数が表示されないのはなぜでしょうか? ご存知の方、ご教示願います。 ●質問の補足 セッション変数を表示させるために 下記のドットインストールの動画の手順に沿って、 コードの打ち込みやリロードを行っていますが、 "dradra35"という変数は表示されません。 ただ真っ白な画面が出るだけです。 変数を表示させるためには、どうすれば良いのでしょうか? 0:54で紹介されている真っ白な画面のところまでは、 その通りになっています。 ドットインストール PHP入門(応用編) #07 セッションを使ってみよう http://dotinstall.com/lessons/basic_php_advanced/6907 ●開発環境 ・windows8 ・xammp1.8.1 ●コード <?php session_start(); //$_SESSION ['userName']="dradra35"; echo $_SESSION['userName'];

    • ベストアンサー
    • PHP
  • セッションについて

    セッション関数は、とても便利な機能ですが、 プログラミングする上で、意識なく多用しても問題ないのでしょうか? 質問の意図は、例えばログインしたユーザーの登録情報等の値を20個位セッションにセットするようなコーディングをしたとして、 同時に1000人位のユーザーがアクセスした場合、システムへの負荷は?(変数と同等に使用してもいいのでしょうか?) a.意識する必要なし b.なるべくセッション関数は使わないほうがいい c.その他 専門的な事はわからないので、簡単に教えて頂けると助かります。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Sessionがnullになりません。

    下記の環境でWebアプリケーションを開発しています。 java 1.5 eclipse 3.3 tomcat 5.5 ある画面Aは検索ボタンを押して結果一覧を表示したり、 結果一覧の詳細を知るためにリンクを押して、ポップアップ画面Bを表示したりします。 web.xmlに <session-timeout>10</session-timeout> と記述し、10分でタイムアウトとしています。 Servlet処理の最初で request.getSession(false) によりセッションを取得し、nullであればタイムアウト画面に遷移させています。 結果一覧を表示した後、10分間何もせずに画面Bを表示しようとすると ポップアップの画面はタイムアウト画面で表示されます。 Servletにブレークポイントをつけて確認したところ このときのrequest.getSession(false)の結果はnullでした。 タイムアウト画面を×ボタンで閉じ、A画面内で検索ボタンを押したところ、 request.getSession(false)の結果はnullではありませんでした。 ただし、session内にsetAttributeしていたBeanが全てnullになっており、 その後の処理で例外が発生してしまいました。 なぜ検索ボタンを押したところで sessionがnullになっていないのでしょうか?

    • ベストアンサー
    • Java
  • JAVAのセッション変数の上書きについて

    JAVAのセッション変数の上書きについて ある画面からセッションに"Data1"というキー名でデータを保存しています。 操作1、画面1で"Data1"をgetし、Data1の中身を変更後、処理の最後にこの"Data1"をセッションに保存 操作2、画面2で画面1の最後に保存したData1を使用して画面表示 操作3、画面2でボタン押下すると再度、Data1を取得して処理を行う。 上記のように別の複数の画面(同一Window)でこの"Data1"を使用するのですが 操作1の処理中(長時間かかる)に画面をCloseして、 まったく関係ない情報に対して画面2を表示すると画面表示時は画面とData1は同期が取れているのですが 操作1の終了後に"Data1"が上書きされてしまい、画面表示内容とセッション変数Data1の内容が 不一致を起こしてしまいます。 なにか良い対策方法がございましたら、ご指導お願い致します。 もうひとつ、session.getAttributeで変数取得後にセッション変数が上書きされた場合 、取得したデータには影響ありませんか?

  • セッション情報について

    現在、ユーザー名とパスワードを入力し自分専用のページにログインするようなサイトを作成しています。 top画面A⇒ログイン画面B(新しい画面)⇒専用ページC ログインが成功した時点で2画面AとCが存在します。 Cではログインした際、状態識別としてセッション変数に値を入れています。 そこで、C画面をログアウトからでななく、直接ブラウザの×ボタンにて閉じると、上記で設定したセッション変数が残っているため、アドレスバーにCのURLを直接記述するとなんなくログインできてしまいます。 上記をできなくする方法などはないでしょうか? 分かりづらい説明で申し訳ありませんが、宜しくお願い致します。

    • 締切済み
    • PHP
  • phpのセッションについて質問です。

    今、for文を使ってsession変数に値を入れて行く処理を作っております。そのためにセッション配列を使おうと考えておりますが、使い方が分からないので教えてください。一応、自分なりに書いてみたのですが動きませんでした。処理的には、一つ目のfor文で値をsessionの配列に一つずつ入れていき、二つ目のfor文でその格納したのを表示するようにしたいです。 <?php session_start(); for($a=1;$a<10;$a++){ $_SESSION['no'][$a]=$a; } for($b=1;$b<10;$b++){ print("こんにちわ".$SESSION['no'][$b]); } ?> ご回答のほどをよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのセッション変数について

    ページの構成が代わり、A-B-Cと順番だったのをA-Cと変更しました。 AからCリンクにとぶように設定したのですが、リンクを変更していてもBのページに行ってしまいます。 このプログラムを作った人に聞きましたところ、 if{session("user_sbt") というセッション変数で、新しく作られた画面のところで何もセットしていなければ初めの画面(B)に戻るというプログラムが走っているそうです。作った人に直してもらえたら良いのですが、事情で日本にはいないので、わかる方教えてください。よろしくお願いします。 PHPファイルの上部には session_start(); require_once("../_common/head.php"); require_once("../_common/mysql.php"); というセッション変数が記入されています。

    • 締切済み
    • PHP
  • onloadにsessionの値を渡したい

    ページが表示されたときに ポップアップメッセージが表示されるよう考えています。 メッセージはsession変数に入っています。 onloadで表示させるにはどうすればよいでしょうか。 コードはhtmlとjavascriptとvbscriptです。 前の画面からserver.Executeで遷移します。