2010-10-27 6 views
2

Я пытаюсь реализовать функцию «запомнить меня» с помощью ASP.NET MVC. Он использует настраиваемый процесс аутентификации, как определено ниже.asp.net mvc authentication cookie issue

Web.config:

<authentication mode="Forms"> 
     <forms loginUrl="/Account/Login" defaultUrl="/Home/MyAccount" timeout="43200"/> 
    </authentication> 

Код упорствовать печенья:

public void SignIn(string userName, bool createPersistentCookie) { 
    int timeout = createPersistentCookie ? 525600 : 120; // Timeout in minutes, 525600 = 365 days. 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(userName, createPersistentCookie, timeout); 
    string encrypted = FormsAuthentication.Encrypt(ticket); 
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted); 
    cookie.Expires = System.DateTime.Now.AddMinutes(timeout); 

    HttpContext.Current.Response.Cookies.Add(cookie); 
    FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 
} 

код, чтобы получить печенье:

 if (System.Web.HttpContext.Current.Request.Cookies.AllKeys.Contains(FormsAuthentication.FormsCookieName)) { 
      cookie = System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; 
     } 

Текущие проверки кода на сессии для проверки подлинности. Я хотел бы добавить возможность получить имя пользователя из файла cookie. У меня есть 2 вопроса:

  1. Что мне нужно сделать, чтобы извлечь файл cookie?
  2. Как дешифровать файл cookie для получения имени пользователя?

Cheers,

Дин

ответ

6

Чтобы получить печенье:

HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(FormsAuthentication.FormsCookieName); 

дешифровать его:

FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value); 
var userName = ticket.UserData 
+0

Спасибо, что прекрасно работает. Я также понял, что мне нужно удалить код FormsAuthentication.SetAuthCookie (имя_пользователя, createPersistentCookie); – Dean