質問: null && Request.Url != ...) { // タイムアウト画面へ遷移する処理 ... } } ``` ### 試したこと ネット上の記事を参考にSession_Startイベントに処理を記述してみました。 リクエストのセッションが取得できなかった場合にはセッションが新しく作成されるため、 そこでこのイベントが起きるということだと思います。 (目的を満たせなかったため、詳しいことを調べてはいません。) しかし、このイベントではタイムアウトしか検知することが出来ないため、 遷移後に戻るボタンを使用したりして再び元の画面で操作を行った場合はダメでした。 そもそもタイムアウトのハンドリングの記事だったと思うので、改めて考えると目的がずれていました。 ### 備考 同様の課題についてマスターページのInitイベントに処理を記述する手法で解決した前例を ネット上で発見し、少なくとも目的は満たせそうなため、一度はそれで満足しかけたのですが、 その方法だとコンテンツページのInitイベントで行いたい処理がある場合には機能しないため、 本質的な解決にはならないのではないかと考え直しました。 熟考の末、論理的な側面から考えても、ログインチェックを行いたいタイミングは、 ページの初期化時ではなくセッションが取得できた直後だと思い、よりよい方法を知りたいと思いました。 追記:マスターページのInitイベントはコンテンツページのInitイベントより先に発生するため、コンテンツページのInitイベントで行う処理があったとしても影響はありませんでした。しかし、コンテンツページのPreInitイベントはマスターページのInitより先に起きるようです。
回答: Application_BeginRequest イベントにてページリクエストのたびにログインチェックを行いたいというなら以下のような感じですかねえ。 1.ユーザーがログイン画面にてユーザーIDとパスワードを入力して認証を行った時にセッションID(Session.SessionID) と ユーザーID(Session.Contents["USER_ID"]) をセットにしてApplication.Contentsに保存する。 ``` Application.Contents[Session.SessionID] = Session.Contents["USER_ID"]; ``` 2.Application_BeginRequest イベントにて Request.Cookies["ASP.NET_SessionId"].value に格納されているセッションIDを取得する。 3.取得したセッションIDをキーにしてApplication.Contentsを読み込みユーザーIDを取得する。 4.取得したユーザーIDでログインチェックを行う。 ``` String sessionid = Request.Cookies["ASP.NET_SessionId"].value; String userid = Application.Contents[sessionid]; if (userid == ... ){ ``` とりあえずApplication.Contentsに保存していますが、できればデータベースとかの方が望ましいでしょう。 ただ、この方法だと後々行き詰るような気がします。 ページリクエストのたびにログインチェックするのもパフォーマンス的にどうなんだろうと思いますし。 私としてはASP.NETのフォーム認証機能を使うことをおすすめします。