2010-12-15 13 views
1

フォーム認証を使用しているasp.net 4.0アプリケーションで、45分でタイムアウトに設定されています。私はセッションが切れたときにタイムアウトページにユーザーをリダイレクトしたいと思います。誰も私にこれを行う方法を教えてもらえますか?私は.net 4.0を実行しています。フォーム認証を使用してGlobal.asax.csが起動しない

web.configファイルがあります。

<authentication mode="Forms"> 
    <forms name=".ASPXAUTH" loginUrl="~/Login.aspx" 
    defaultUrl="~/Default.aspx" protection="All" timeout="45" 
    requireSSL="false"> 
    </forms> 
</authentication> 

Global.asax.csファイルがあります:

void Session_End(object sender, EventArgs e) 
{ 
    Response.Redirect("~/Timeout.aspx"); 
} 

答えて

4

を参照してください。要求の結果として実行されていないため、Responseオブジェクトがなく、どこにでもリダイレクトする応答はありません。

セッションの有効期限が切れたため、ブラウザで何もできません。 HTTPプロトコルは要求指向型なので、ブラウザーが要求しない限り、サーバーからブラウザーにメッセージをプッシュする方法はありません。

ブラウザは、セッションの期限が切れているかどうかを確認できません。セッションが期限切れになっていないかどうかを確認するためにサーバーをポーリングすると、タイムアウトの目的を破ってセッションが生き残ります。

あなただけのクライアントスクリプトを使用して45分後にリダイレクトを行うことができます。このブラウザウィンドウが最後のサーバーに接続するので

window.setTimeout(function() { 
    window.location.href = '/Timeout.aspx'; 
}, 1000*45*60); 

しかし、これが唯一の時間に基づいてリダイレクトを行います。同じセッションに複数のブラウザウィンドウがある場合は、セッションが実際にタイムアウトしていない可能性があります。 MVCで

+0

リダイレクトは、リフレッシュ偶数、またはセッションデータをチェックする何らかの種類のajax呼び出しになります。 –

+0

あなたは正しいです。あなたはjQuery idleTimer(http://paulirish.com/2009/jquery-idletimer-plugin/)のようなものを使うことができると思うので、(window.setTimeout)と同じように45分に設定してリダイレクトしますか?それがうまくいくと思いますか?私は45分のアイドル時間を待ち、ログアウト/セッション終了/リダイレクトを強制することができます。 – capdragon

+0

@krefftc:あなたがリンクしているページはあまり読みにくくて迷惑なアニメーションなのであまり読みませんでしたが、アイドルタイマーはユーザーがブラウザでアクティブかどうかを調べようとしています。セッションタイムアウトは、ブラウザがサーバから何かを取得しない限り、ユーザがブラウザ内で何をするかに全く気にしないので、それはまったく影響を受けません。したがって、 'setTimeout'は、セッションがサーバ上でタイムアウトしたときに対応する方が良いでしょう。 – Guffa

3

どのようにあなたのセッション状態が実装されていますか? Session_Endは、InProcを使用している場合にのみ機能します。

は、それはSession_End方法でリダイレクトを行うことはできませんhttp://www.eggheadcafe.com/articles/20021016.asp

+0

私は状態のフォーム認証を使用するものは何でもセッションと思います。 – capdragon

+1

フォーム認証!=セッション状態。 –

+0

いずれにせよ、デフォルトはInProcです。手動でSQL Serverなどに変更する必要があります。はい、これは7年後のことですが、気にしません。 –

0

あなたは

_ViewStart.cshtml

にこのコードを追加することができ_ViewStart.cshtml:

@{ 
    Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));  

    if(Session.IsNewSession) 
     Response.Redirect(“Logout.aspx");// or another page which you want. 
} 

How to Redirect on Session End

関連する問題