2011-02-15 69 views
3

技術我使用的是:我應該在LogOff方法中使用Session.Abandon()嗎?

  • MVC V2
  • 窗體身份驗證(滑動過期)
  • 會話狀態服務器
  • 自定義授權屬性

我使用狀態服務器過程爲我的mvc應用程序。在測試期間,當一個經過身份驗證的用戶點擊「LogOff」按鈕時,它會正確地將他們帶到身份驗證屏幕,並且在成功輸入證書後,會將他們記錄下來。但是,它會找到他們以前的會話變量狀態,重新加載我給他們的任何新的權限。這是由於我如何加載用戶在下面的代碼:

public override void OnAuthorization(AuthorizationContext filterContext) { 

     if (filterContext == null) 
      throw new ArgumentNullException("FilterContext"); 

     if (AuthorizeCore(filterContext.HttpContext)) { 
      IUser customUser = filterContext.HttpContext.Session["CustomUser"] as IUser; 

      if ((customUser == null) || (customUser.Name != filterContext.HttpContext.User.Identity.Name)) { 
       customUser = new User(filterContext.HttpContext.User.Identity.Name, 
             filterContext.HttpContext.User.Identity.IsAuthenticated); 
      } 

      if (_privileges.Length > 0) { 
       if (!customUser.HasAtLeastOnePrivilege(_privileges)) 
        filterContext.Result = new ViewResult { ViewName = "AccessDenied" }; 
      } 

      filterContext.HttpContext.Session["CustomUser"] = customUser; 
     } 
    } 

所以,你可以看到我存儲我的customUserSession和值是什麼是現有會話牽強,即使用戶已註銷之間(但滑動過期窗口內的重新登錄。

所以,我的問題是,我應該把在AccountController簡單Session.Abandon()呼叫我LogOff方法,或者是有一個更清潔更有利的方式處理這個?

回答

7

Norma lly Session.Clear()應該已經足夠,並刪除會話中存儲的所有值。 Session.Abandon()結束當前會話。它也可能觸發Session_End,下一個請求將觸發Session_Start。

相關問題