2015-04-28 4 views
0

Мой web.config я поставил 10 мяту для тайм-аутаCookies истекающие после каждой сессии

<sessionState mode="InProc" timeout="10" /> 

И мой фильтр следующим образом

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpSessionStateBase session = filterContext.HttpContext.Session; 

     HttpCookie userInfoCookie = 
      HttpContext.Current.Response.Cookies[System.Configuration.ConfigurationManager.AppSettings[Convert.ToString(CookieField.cookieName)]]; 
     string userExpire = string.Empty; 
     userExpire = new UserControllerHelper().FetchDataFromCookie(CookieField.UserRoleId.ToString()); 
     if (userExpire == null) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" }, { "Area", "" } }); 
     } 
    } 

И мои все методы имеют фильтр [SessionExpire] Он отлично работает в течение одного сеанса, но для последующего щелчка по тому же методу действий куки автоматически очищаются.

В Global.asax я следующий код

void Session_Start(object sender, EventArgs e) 
{ 
    Session.Timeout = 10;    
} 

void Session_End(object sender, EventArgs e) 
{ 
} 

Я пробовал разные выходы времени, но все еще не повезло.

Я спасаю печенье со следующим кодом

//create a cookie 
     string cookieName = System.Configuration.ConfigurationManager.AppSettings[Convert.ToString(CookieField.cookieName)]; 
     HttpCookie userCookie = new HttpCookie(cookieName); 
     //Add key-values in the cookie 
     userCookie.Values.Add(Convert.ToString(CookieField.UserId), EncryptData(Convert.ToString(userRegistrationModel.Id))); 
     userCookie.Values.Add(Convert.ToString(CookieField.UserFirstName), EncryptData(Convert.ToString(userRegistrationModel.FirstName))); 
     userCookie.Values.Add(Convert.ToString(CookieField.UserLastName), EncryptData(Convert.ToString(userRegistrationModel.LastName))); 
     userCookie.Values.Add(Convert.ToString(CookieField.UserLogin), EncryptData(Convert.ToString(userRegistrationModel.Login))); 
     userCookie.Values.Add(Convert.ToString(CookieField.UserPassword), Convert.ToString(userRegistrationModel.LoginPassword)); 
     userCookie.Values.Add(Convert.ToString(CookieField.UserRoleId), EncryptData(Convert.ToString(userRegistrationModel.RoleId))); 
     userCookie.Values.Add(Convert.ToString(CookieField.UserConfirmed), Convert.ToString(userRegistrationModel.IsConfirmedByAdmin)); 
     //set cookie expiry date-time, if required. 
     userCookie.Expires = DateTime.Now.AddMinutes(10); 
     //writing the cookie to client. 
     HttpContext.Current.Response.Cookies.Add(userCookie); 

, но после того, как момент «истекает» автоматически превращается в 0. Есть ли ошибка в экономии времени истечения даты в этом коде?

ответ

0

Я обновил фильтр и решить :)

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    HttpSessionStateBase session = filterContext.HttpContext.Session; 
    string userExpire = string.Empty; 
    userExpire = new UserControllerHelper().FetchDataFromCookie(CookieField.UserRoleId.ToString()); 
    if (userExpire == null) 
    { 
     filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" }, { "Area", "" } }); 
    } 
} 
Смежные вопросы