セッションをクリアし、セッション タイムアウトでユーザーをサインアウトして、ログイン ページにリダイレクトしようとしています。ログイン ページは、アカウント コントローラーのログオン メソッドによって返される部分的なビューです。セッションがタイムアウトすると、ログイン ビューは、セッションがタイムアウトする前にユーザーが表示していた現在のページにレンダリングされ、URL と同じことがレンダリングされます。
Web.Config
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
<sessionState timeout="45"></sessionState>
</authentication>
</system.web>
</configuration>
BaseController.cs
protected override void OnActionExecuting( ActionExecutingContext filterContext )
{
HttpContext ctx = HttpContext.Current;
if(ctx.Request.IsAuthenticated)
{
if (ctx.Session != null)
{
if (ctx.Session.IsNewSession)
{
string sessionCookie = ctx.Request.Headers["Cookie"];
if (null != sessionCookie)
{
Session.Clear();
FormsAuthentication.SignOut();
var rr = new RedirectResult(loginUrl);
filterContext.Result = rr;
}
}
}
}
base.OnActionExecuting ( filterContext );
}
クライアントからリダイレクトする必要があることはわかっていますが、別のセッション タイマーを追加したくありません。セッションがタイムアウトしたときにサーバーから「実際の」リダイレクトを行う方法はありますか?
私が望むのは、セッションがタイムアウトしたときに、サーバーが現在のセッションをクリアし、ユーザーをサインアウトしてログイン ビューを表示し、現在のページにログオン ビューをレンダリングしないことです。
任意のヒント?