• 締切済み

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