ASP.NET MVC で、非アクティブ状態が約 20 分間続くと、ユーザーが強制的に再ログインするという問題が発生しています。
フォーム認証を使用しており、構成ファイルのタイムアウトを次のように増やしました。
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="9999999" />
</authentication>
また、構成ファイルでセッションタイムアウトを次のように設定しています。
<sessionState timeout="120"></sessionState>
これは、Rockford Lhotka の CSLA ASP.NET MVC の例に基づいており、global.asax に次のものがあります。
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
if (HttpContext.Current.Handler is IRequiresSessionState)
{
if (Csla.ApplicationContext.AuthenticationType == "Windows")
return;
System.Security.Principal.IPrincipal principal;
try
{
principal = (System.Security.Principal.IPrincipal)
HttpContext.Current.Session[MyMembershipProvider.SESSION_KEY];
}
catch
{
principal = null;
}
if (principal == null)
{
if (this.User.Identity.IsAuthenticated && this.User.Identity is FormsIdentity)
{
// no principal in session, but ASP.NET token
// still valid - so sign out ASP.NET
FormsAuthentication.SignOut();
this.Response.Redirect(this.Request.Url.PathAndQuery);
}
// didn't get a principal from Session, so
// set it to an unauthenticted PTPrincipal
BusinessPrincipal.Logout();
}
else
{
// use the principal from Session
Csla.ApplicationContext.User = principal;
}
}
}
私が言えることから、120分間非アクティブになった後にのみタイムアウトする必要があります...しかし、何らかの理由で、20分間非アクティブになると常にタイムアウトするようです。なぜこれが起こっているのか、アイデアはありますか?
フォーム認証をダンプしてセッション経由で自分で処理するというアイデアをいじっていますが、 [Authorize] 属性などの機能が失われるのではないかと心配しています。この道を下らないようにしています。
カスタム プリンシパル オブジェクトを Cookie として保存することはできますか? すべてのページまたはアクションに対してユーザーを認証/承認する必要はありません。
私は髪を失っています...急速に!=)