• 締切済み

Global.aspxでのエラー処理について

VisualStudio2010でwebページ(C#)を作成しています。 共通エラー処理を実装したいため、Global.aspxにエラー処理を記述しています。 Application_Errorには、以下のようなエラー画面への遷移を Response.Redirect(Server.MapPath("~/error/globalError.html")); のように記述しています。 また、Session_Startにユーザ情報を取得して、Sessionに格納し、 ユーザ情報にエラーがあればエラーを発生させる処理も記述しています。 ここで、Sssion_Startでエラーが発生した際、 Application_Errorでエラー画面への遷移を行い、処理を終了させたいのですが、 Session_Startイベントが再度発生してしまいます。 さらに、SessionIDは変わっていないのに、Sessionに格納したユーザ情報がクリアされています。 これはなぜなのでしょうか? 再度発生させなくする方法はありますか?

みんなの回答

  • WebSurfer
  • ベストアンサー率55% (33/59)
回答No.2

Response.Redirect(Server.MapPath("~/error/globalError.html")); でなくて、 Response.Redirect(~/error/globalError.html"); としたらうまくいきませんか? 前者はブラウザがドメインが違うと 判定して、セッションクッキーをサーバーに送ってないのではないか と思われます。

koutan5
質問者

お礼

返答が遅くなりすみません。 Response.Redirect(~/error/globalError.html"); でも結果は同じでした。 推測なのですが、Session_Startでエラーが発生した場合、 Sessionがまだ確立されていないことと判断されて、 Redirectにより、再度セッションを確立しようとしてしまうのではないかと。。 エラーページに飛んだときに、セッションを確立しない方法があればいいのですが・・・

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

Response.Redirect()を使っているから、別セッションになるのだと思います。 Server.Transfer()を使ってみてください。

koutan5
質問者

お礼

なるほど、確かにうまくいきました!! ありがとうございます。 ですが、これはなぜなのでしょうか? 普通に画面遷移するときは、Redirectでもセッションは引き継がれますよね? Global.aspxで処理しているからなのでしょうか?

関連するQ&A

  • サブウィンドウへのデータの受け渡し方

    はじめまして。 一覧画面から、ボタン押下でサブウィンドウを開き、詳細登録画面を表示するというような、 複数サブウィンドウで構成される webアプリケーションをつくりたいのですが、 実現可能かわからなく、困っています。 (1)サブウィンドウへのデータの受け渡し sessionにユーザ情報やその他のデータを格納して、 サブウィンドウに情報を渡そうと思っていますが、 sessionに格納した情報はサブウィンドウにも引継ぎができますか? sessionのスコープで調べていたのですが、 よくわかりませんでした。 (2)一つのブラウザ上で画面遷移せず、ほとんどサブウィンドウを開いて画面遷移する構成にしています。 こういう構成のwebアプリケーションを今まで見たことがなく、何か問題や弊害があるのではないか? webアプリケーションの構成として間違っていないか?不安です。 ちょっとしたことでもご指摘いただければありがたいです。 よろしくお願いします。

  • docomoのセッションが切れてしまうのは?

    携帯サイト用のセッションでdocomoの時だけ思うように フォームによるページ遷移ができません。 色々試してみたのですが、サッパリです。 どなたかお知恵をお貸し下さい。 例) -- page01.php -- session_name( "test" ); session_start(); session_regenerate_id(true); $test = session_name()."=".session_id(); if ( ( $smp01 = auth() ) == FALSE ) { header( "Location: ./test.php?redirect=index_test.php?" ); exit; }←ログイン時の処理(ユーザー定義関数にて) ・        ・        ・        ・ <form action="page02.php?<?= $test ?>" method="get" /> 入力:<input name="test01" type="text" value="" /> <input name="smp02" type="submit" value="next" > </form> ↑入力させてpage02.phpにて処理 上記のようにしているのですが、 submitするとログイン時の処理に掛かってセッションが切れてしまい ログインページに戻ってしまいます。 ログイン時の処理を削除するとpage02.phpへと遷移します。 ログイン時の処理を残したままセッションが切れずにフォームによる ページ遷移ができるようにするにはどのようにすれば良いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • エラー処理について

    お世話になっております。 現在、Excel2007でCSVファイルを取り込むVBAで作成しています。 下記のURLを参考にしています。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_030.html エラー処理について皆さんにお聞きしたい事があり、投稿させていただきました。 ダイアログでファイルを選択した際にエラーが発生した場合、どのようにエラー処理をしたらいいのでしょうか。 できれば Do Until objTS.AtEndOfStream ※この中で・・・ Loop 現在は下記のように記述していますがうまく処理できません。 正常でもエラーでもエラー扱いされてしまいます。  Do Until objTS.AtEndOfStream   On Error GoTo ErrHandler ErrHandler:   MsgBox "エラーが発生しました。Excelを強制終了します。", vbOKOnly + vbCritical, "終了"   Application.Quit   Windows("ファイル名").Close True  Loop すみませんがどうかアドバイス宜しくお願いします。 では失礼します。

  • sessionとcookieの設定内容の区別

    セッションとクッキーの使い分け方法を教えていただけないでしょうか? 簡単に言えばセッションがサーバサイド、クッキーがクライアントサイド、 セッション内容はブラウザ切れば消える(残すことも出来る)、クッキーはブラウザに残る、 と言うことは分かっているのですが、実装の仕方が分かりません。 例えばログインフォームでは$_SESSION['name']、$_SESSION['password']を回す・・・というのは分かります。 認証が終われば$_SESSION['name']、$_SESSION['password']は破棄して$_SESSION['login']=TRUE等を使うのではないかと思っております。 (そうではなくて、認証後は全て$_COOKIEで処理するのでしょうか?) で、$_COOKIEにはsessionIDが入っていると。 しかしながら、ブラウザ切っても暫くしてまたサイトを訪れたときにログイン状態が続くようにするにはどのようにすればいいのでしょうか? $_COOKIEにその情報を格納するのだと思うのですが、例えば$_COOKIE内にユーザidやlogin=OKのような文字を入れているとブラウザから見えてしまいます。 勿論ハッシュ化をして簡単には把握できないでしょうが、ここにはどんな情報が格納されているのか見当も付きません。 具体的な$_SESSION、$_COOKIEに入れるものと、サイトでの各々の実装法を教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • sessionうまくいかない

    sessionの勉強のためにphpで簡単なページを作ってみたのですが、 sessionIDが次のページに送れてないみたいで、うまくいきません。 1ページ目 @session_start(); print session_id(); $_SESSION["ID"]=session_id(); 2ページ目 @session_start(); print session_id(); sessionの記述はこのようにしています。 環境は Windows Vista IE7 PHP5 Apache2.2 です。 よろしくお願いします。

    • 締切済み
    • PHP
  • Sessionについて

    Session管理について以下のページを参考にしました。 http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html あるServletにおいて、(1)セッション開始後、 ( HttpSession session = request.getSession(true);) (2)セッションに値を格納・・・また、違うServletで (3)そのセッションに格納された値を取得・・・ といったやり方が載っていました。 よく、セッション管理についてまだ分かってないところが あるのですが、・・・ たとえば、Aサーブレットでセッションを開始し、 セッションに値を格納・・・・とします。 そのセッションに入れる値。。。というのを 「顧客ID」と「処理CD」の2つにしたい場合はどのような 記述になるのでしょうか?? 参考にしたページには //セッションに値を格納 UserInfo userInfo = new UserInfo(...); session.setAttribute("USER_INFO", userInfo); こんな感じで書いてるんですが、 これは、USER_INFOというキーワードでuserInfoを 値としてセットするということですよね? 顧客IDと処理CDを記述するときは、なにか それぞれオブジェクトが必要なんでしょうか?? よくわかってないです。 ・・・・すみません。よく意味がわかってないので 質問内容も中途半端だと思うのですが、 セッション管理について教えてください。

  • フレームのあるWeb画面から、フレームのないWeb画面への遷移方法

    最初にお断りしておきますが、以下の質問は少し前にVBのカテゴリーで質問させて頂いたのですが、回答が得られなかったのと、後でよく考えたらASPの質問かな、と思ったのでASP側で質問させて頂く次第です。 VB.Net2003でWebシステムを開発している者です。画面遷移で困っており、詳しい方がおられたら教えて頂けないでしょうか。 開発中のシステムでは、まずログイン画面(フレームなし)を表示し、ログイン認証がOKとなった場合、業務画面(左右に分割したフレーム画面。左側はメニューで、右側はメイン画面)に遷移するようにしています。 ここまではなんとか実装できたのですが、「ログイン認証を行わず、ブラウザから業務画面(フレームあり)のURLを直接指定した場合、エラー画面(フレームなし)を表示したい」と考えています。 そのため、次のような実装を行いました。 (1)ログイン認証でOKとなった場合、業務画面に遷移する直前にセッション変数にセッションID(Session.SessionID)を設定する。 (2)業務画面(右側のメイン画面)のPage_Loadメソッドにて「(1)で登録したセッションID」と「Page_Loadメソッド実行時のセッションID(Session.SessionID)が異なっていれば、エラー画面に遷移(Response.Redirect(エラー画面))を行う。 上記実装後に、ログイン認証を行わずに業務画面(フレームあり)のURLを直接指定すると、フレームの右側のみがエラー画面となり、左側は表示されてしまいます。 フレームのある画面のロード時にチェックを行って、エラーとなった場合に、フレームのない画面を表示させるには、どのように実装すればよいのでしょうか? 以上よろしくお願いします。

  • PHPサイトでのセッション情報取得について

    PHPのサイトにて、ユーザーIDをJavaScriptの変数に渡す処理について質問です。 システム会社からユーザーIDが格納されている変数ということで下記の記述を教えていただきました。 「Session::getRegistry('uid')」 そこで、下記のようにjsを設定したのですが、値を取得できません。 <script type="text/javascript"><!-- uid='<? Session::getRegistry('uid'); ?>'; // --></script> 【質問】 1.「Session::getRegistry('uid')」という記述でデータを取得可能なのでしょうか? 2.もし、セッションの「uid」に値が格納されているとした場合、どのように記述したら上記のJavaScriptに値を渡せるでしょうか?

    • 締切済み
    • PHP
  • リダイレクトでPOSTリクエストを復元する方法

    【行いたいこと】 RailsでRESTフルなリソースを扱うアプリを開発しています。 アプリはユーザ認証機能を備えており、 RESTフルなリソースの操作(作成や削除など)はログインしたユーザだけが行えます。 ログインしていないユーザがこれらの操作をおこなうリクエストを送ってきた場合には、 認証ページに遷移させ、ユーザがログインした直後に、 ユーザ操作なしで当初のアクセスに対する操作処理を行いたいです。 【もくろみ】 ログインしたユーザだけが行える操作へのアクセスは、 フィルタ(before_filter)を使いインターセプトし、 ログインしていないユーザの場合には認証ページにリダイレクトします。 インターセプタ時点でリクエスト情報をセッションに格納しておき、 ログイン後にセッションからリクエスト情報を取り出し、 その情報を使ってリダイレクトすれば良いと考えました。 【問題点】 GETリクエスト(GETメソッドでのHttpリクエスト)をインターセプタした場合は上手くいきましたが、 POSTリクエストではリクエストを復元できません。 GETメソッドのリクエストになってしまいます。 リダイレクト(redirect_to)はブラウザにGETリクエストしか要求できないためです。 何か解決策はありますでしょうか。 よろしくお願いします。

  • ユーザー定義関数の処理

    エラーメッセージに関する以下の関数はどのような処理をする関数ですか? 自分なりに解釈したものを//で書いています。 // エラーがセットされているときは、$errorsを返す // もしセッション変数にエラーがないときは、空の配列を返す function get_errors(){ // セッション変数にエラーがセットされているときは$errorsを以下のように定義する $errors = get_session('__errors'); if($errors === ''){ return array(); } // もしセッション変数にユーザー名($name)がセットされているなら、セッション情報を返す // セットされていないときは空文字を返す function get_session($name){ if(isset($_SESSION[$name]) === true){ return $_SESSION[$name]; }; return ''; } // $nameと$valueを受け取り、セッション情報(ユーザー名)を$valueと定義する function set_session($name, $value){ $_SESSION[$name] = $value; }

    • ベストアンサー
    • PHP

専門家に質問してみよう