2011-06-18 4 views
0

私は自分のauthorize属性でasp.net mvc 3サイトを持っています。 Iユーザーがログインが 私は何が欠けていますか?私のフォームタイムアウトはセッションをタイムアウトしません

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) 
     { 
      throw new ArgumentNullException("httpContext"); 
     } 


     if (httpContext.User.Identity.IsAuthenticated) 
     { 
      return true; 
     } 

     return false; 
    } 

AuthorizeAttribute

フォーム認証クッキー

public void SetAuthCookie(string userName, string userData = "",int version = 1) 
    { 
     DateTime expiry = DateTime.UtcNow.AddMinutes(30); 

     FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(version, userName, DateTime.UtcNow, expiry, false, userData, "/"); 

     string encryptedTicket = FormsAuthentication.Encrypt(authTicket); 

     HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) {Path = "/"}; 

     HttpContext.Current.Response.Cookies.Add(authCookie); 
    } 

//を作るときだから私は自分のサイトへのログインに進み、タイムアウトに自分のサイトを待ちます。私はその後、要求を行う(これはAjaxのリクエストです)、それは最初に私の属性を通過し、httpContext.User.Identity.IsAuthenticatedはまだ私は3分

<authentication mode="Forms"> 
     <forms loginUrl="~/Account" 
         protection="All" 
         name=".MySite" 
         path="/" 
         requireSSL="false" 
         slidingExpiration="true" 
         defaultUrl="default.aspx" 
         cookieless="UseDeviceProfile" 
         enableCrossAppRedirects="false" 
         timeout="1" 
         /> 
    </authentication> 

答えて

3

あなたがクッキーを作成しているため、サーバーに要求していないにもかかわらず、trueに設定されています30分のタイムアウト:このクッキーが無効になる前に

DateTime expiry = DateTime.UtcNow.AddMinutes(30); 

ですから、30分を待たなければなりません。 30分のタイムアウトで手動でクッキーを作成しているため、web.configで指定した1分のタイムアウトは無視されます。

あなたのweb.configファイルからの値と一致する場合は、以下を使用することができます。

DateTime expiry = DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout); 
関連する問題