2012-08-10 25 views
0

我有這個問題。當用戶登錄時,我使用formsauthanticationticket創建cookie:asp.net mvc3 Cookie過期後重定向用戶

var formAuthTicket = new FormsAuthenticationTicket(1, model.UserName, DateTime.Now, DateTime.Now.AddMinutes(1), false, ""); 
        var encryptedFormAuthTicket = FormsAuthentication.Encrypt(formAuthTicket); 
        var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedFormAuthTicket); 
        Response.Cookies.Add(cookie); 
        return RedirectToAction("Index", "Home"); 

現在。在PreRequestHandlerExecute事件我檢查,如果用戶通過身份驗證/ cookie存在。

var cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
     if (cookie != null) 
     { 

      var formAuthTicket = FormsAuthentication.Decrypt(cookie.Value); 
      var newFormAuthTicket = new FormsAuthenticationTicket(formAuthTicket.Version, formAuthTicket.Name, 
                    formAuthTicket.IssueDate, 
                    DateTime.Now.AddMinutes(1), 
                    formAuthTicket.IsPersistent, 
                    formAuthTicket.UserData, 
                    FormsAuthentication.FormsCookiePath); 
      cookie.Value = FormsAuthentication.Encrypt(newFormAuthTicket); 
      context.Response.Cookies.Set(cookie); 
     } 

但是,當餅乾不存在/過期我想將用戶重定向到登錄頁面,當他點擊某個環節。任何想法? 感謝

編輯

因爲我不能使用授權的屬性。我知道這件事。我在程序集中有httpmodule,它在web項目中被引用。在httpmodule中我有Init方法,我在這裏初始化PreRequestHandlerExecute()事件。如果我檢查用戶的身份驗證。如果我在「else」中使用類似這樣的內容 - > Response.Redirect(url),會發生循環重定向,這是錯誤的。 10分鐘後沒有任何請求,用戶點擊一些鏈接,他將被重定向到登錄頁面 - >這是我的問題,我無法解決。

+0

喬治是對的。您似乎要求的是表單身份驗證的默認行爲。 – 2012-08-10 14:39:38

+0

是的,我知道這種方法。但將來,這將是很多工作。 – Bxx 2012-08-10 15:50:07

回答

1

爲什麼你只是不使用[Authorize]屬性?添加在你行動的跡象,如果有過期的認證相關的cookie將被自動重定向到登錄頁面

例如

[Authorize] 
public ActionResult Profile()  
{ 
} 

如果你需要一個定製的實現創建自定義屬性實現接口例如

public class FooAuthorizeAttribute : AuthorizeAttribute 
{ 
    public string fooField{ get; set; } 

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    //Do my stuff 
} 

然後叫你的行動

[FooAuthorizeAttribute] 
public ActionResult Profile()  
{ 
} 
+0

因爲我不能使用授權屬性。我知道這件事。我在程序集中有httpmodule,它在web項目中被引用。在httpmodule中我有Init方法,我在這裏初始化PreRequestHandlerExecute()事件。如果我檢查用戶的身份驗證。如果我在「else」中使用類似這樣的內容 - > Response.Redirect(url),會發生循環重定向,這是錯誤的。 10分鐘後沒有任何請求,用戶點擊一些鏈接,他將被重定向到登錄頁面 - >這是我的問題,我無法解決。 – Bxx 2012-08-10 15:04:43