2009-08-29 23 views
2

保護されたページにアクセスするときにlogin.aspxにリダイレクトするフォーム認証の設定がある場合、ログインしていないためにlogin.aspxでユーザーが送信されたかどうかを検出するには、または、そのフォームの認証チケットが期限切れになっているためですか? "あなたはタイムアウトしました"というメッセージを表示したいと思います。ログインページでのフォーム認証タイムアウトの検出

(私はASP.NETはそうはっきりとそれらを扱うので、しかし、セッションを必要とする良い解決策がある場合、私はすべての耳だ、この質問に言葉セッションを言及していない)

私はしましたユーザーがログインしたときに別のクーコム "hasloggedin"を設定して、これがタイムアウトかどうかを判断して適切なメッセージを表示するかどうかを確認することでこれを解決しました。しかし、これは共通の問題でなければなりませんか?

+0

あなたのクッキーの方法は、それを行うには良い方法であると思われます。すでにセッション変数を使用している場合(相対タイムアウト値と認証タイムアウトに応じて)、 'Page.Session.IsNewSession'をチェックして、セッションが現在のリクエストで作成されたかどうかを調べることができます。 – JustinStolle

答えて

2

フォーム認証は自動的に、ログインページへのリダイレクトをトリガしたページ(存在する場合)を示すURLパラメータ 'ReturnURL'を追加します。ほとんどのウェブサイトには、デフォルトのページとして 'Default.aspx'や 'index.html'などがあります。 ReturnURLをチェックして、デフォルトページやアプリケーションの他のページが含まれているかどうかを確認できます。

例:

string refererURL; 
if (page.Request.QueryString["ReturnURL"] != null) 
{ 
    refererURL = page.Request.QueryString["ReturnURL"].ToString(); 
} 

//Check to see if user was redirected because of Timeout or initial login 
//Where "Default.aspx" is the default page for your application 
if (refererURL != "" && refererURL != (ResolveUrl("~") + "Default.aspx")) 
{ 
    //Show HTML etc showing session timeout message 
} 
else // User redirected here to to initial login 
{ 
    //Show HTML showing initial login HTML message etc 
} 
+0

良いアイデア。これは私の現在のアプリではうまくいくかもしれませんが、私がやったことのあるものでは、匿名のページには認証が必要なページへのリンクがありますので、returnurlでタイムアウトや保護年齢。しかし、私はこれが多くの場合にうまくいくはずだと思うし、それをリターンの実際の価値を見て組み合わせると、それをさらに良くするはずです。返信いただきありがとうございます。 – RyanW

関連する問題