2015-02-14 2 views
0

У меня есть следующий код, и в соответствии с другими ответами stackoverflow он должен работать, но это не так. Я что-то пропустил?Auth cookie не является постоянным

DateTime expiration = DateTime.Now.AddMinutes(30); 
if (rememberMe) 
{ 
    expiration = DateTime.Now.AddMonths(1); 
} 
HttpContext.Current.Response.Cookies.Clear(); 

var ticket = new FormsAuthenticationTicket(1, email, DateTime.Now, expiration, rememberMe, 
guid.ToString(), FormsAuthentication.FormsCookiePath); 

string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
cookie.Expires = ticket.Expiration; 
HttpContext.Current.Response.Cookies.Add(cookie); 

и чтение куки в Application_AuthenticateRequest

var authCookie = Request.Cookies.Get(FormsAuthentication.FormsCookieName); 
if (authCookie == null) return; 

var ticket = FormsAuthentication.Decrypt(authCookie.Value); 
if (ticket == null) return; 
... 

и мой вход web.config:

<authentication mode="Forms"> 
    <forms loginUrl="~/Home/Index" timeout="30" /> <!-- 30minutes 
</authentication> 

ответ

0

1-В корневом web.config вашего asp.net проекта, в системе .web, установите режим проверки подлинности на «Формы»:

<system.web> 
    <compilation debug="true" targetFramework="4.5.2" /> 
    <httpRuntime targetFramework="4.5.2" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="login" timeout="18000" /> 
    </authentication> 
</system.web> 

2-Для упорствовать аутентификации ключей использование:

using System.Web.Security; 

FormsAuthentication.SetAuthCookie(userName,false); 

3- Для чтения текущего аутентификации ключа использование:

var userName=controller.User.Identity.Name; 
Смежные вопросы