2014-01-16 1 views
0

Я пытаюсь создать cookie проверки подлинности форм, используя приведенный ниже код. Хотя это отлично подходит для постоянного входа в систему, непостоянный cookie не истекает и удаляется из браузера, когда я закрываю сеанс браузера. Он по-прежнему сохраняется в браузере.FormsAuthentication non persistent Cookie не истек в MVC 4 Application

public static void SetAuthenticationCookie(string userName, Role role, 
bool isPersistent) 
{ 
string data = role.RoleName; 
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName,isPersistent); 
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value); 
FormsAuthenticationTicket newticket = new FormsAuthenticationTicket(
ticket.Version, ticket.Name, ticket.IssueDate,ticket.Expiration, 
ticket.IsPersistent,data); 
    authCookie.Value = FormsAuthentication.Encrypt(newticket); 
    HttpContext.Current.Response.Cookies.Add(authCookie);    
} 

Вот запись web.config для проверки подлинности форм

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" cookieless="UseCookies" name=".OneClick" 
    protection="All" slidingExpiration="true" timeout="43200" /> 
</authentication> 

Вот скриншот информации куки из браузера

Cookie Information

Есть что-нибудь мне не хватает Вот? Пожалуйста, дайте мне знать

ответ

0

Я не уверен, что это правильное решение. Но я узнал, что, несмотря на то, что срок действия файла cookie установлен на предыдущее время, истекает срок действия билета проверки подлинности форм, установленного в файле web.config, что ведет себя как постоянный файл cookie. Поэтому я попытался установить 1 минуту в качестве печенья и истечения срока действия билета, который заставляет cookie и билет истекать через 1 минуту.

Несмотря на то, что срок действия нестойчивого файла cookie истекает после завершения сеанса браузера. По какой-то причине этот файл cookie сохраняется до истечения срока действия cookie проверки подлинности.

Вот решение.

public static void SetAuthenticationCookie(string userName, Role role, 
        bool isPersistent) 
{ 
    string data = role.RoleName; 
    HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, 
    isPersistent);    

    if (!isPersistent) 
    { 
    authCookie.Expires = DateTime.Now.AddMinutes(30); 
    } 

FormsAuthenticationTicket ticket=FormsAuthentication.Decrypt(authCookie.Value);   
FormsAuthenticationTicket newticket= 
new FormsAuthenticationTicket(ticket.Version,ticket.Name, ticket.IssueDate, 
authCookie.Expires, ticket.IsPersistent, data);    
authCookie.Value = FormsAuthentication.Encrypt(newticket); 
HttpContext.Current.Response.Cookies.Add(authCookie);    
} 

Предложения или улучшения приветствуются.

С благодарностью

 Смежные вопросы

  • Нет связанных вопросов^_^