永久登录mvc.net

时间:2014-01-08 11:35:14

标签: asp.net asp.net-mvc .net-security

我正在进行MVC.net应用程序的永久登录,我尝试在FormAuthantication中使用IsPersistent = true,但如果我重新启动iis,那么它会注销用途 下面是负责登录的代码。

public void SetLoginData(UserLoginInfo userLoginInfo)
        {
            HttpContext .Current.Session[SessionUserEmailIdKey] = userLoginInfo.Email;
            HttpContext.Current.Session[SessionWelcomeNameKey] = userLoginInfo.FirstName;
            HttpContext.Current.Session[SessionWelcomeRegistrationIdKey] = userLoginInfo.RegistrationId;

            HttpContext.Current.Session[SessionLoginInfoKey] = userLoginInfo;
            const bool isPersistent = true;
            const string userData = "user";

            var ticket = new FormsAuthenticationTicket(1,
                                                       userLoginInfo.RegistrationId.ToString(
                                                           CultureInfo.InvariantCulture),
                                                       DateTime.UtcNow,
                                                       DateTime.UtcNow.AddMinutes(180),
                                                       isPersistent,
                                                       userData,
                                                       FormsAuthentication.FormsCookiePath);

            string encTicket = FormsAuthentication.Encrypt(ticket);
            HttpContext.Current.Request.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
            HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
        }

请告诉我如何实施登录,以便即使应用重启,用户也不会退出。

1 个答案:

答案 0 :(得分:4)

为了创建永久登录,您需要确保有两件事情(因为您使用的是FormsAuthentication)。

首先 - 确保您的票证到期时间设置为将来的某个时间

 = new FormsAuthenticationTicket(1,
        userLoginInfo.RegistrationId.ToString(CultureInfo.InvariantCulture),
        DateTime.UtcNow,
        DateTime.UtcNow.AddYears(20),
        isPersistent,
        userData,
        FormsAuthentication.FormsCookiePath);

其次(并且很可能为什么用户在重新启动IIS时被踢出网站)是在web.config中使用静态密钥对设置创建machineKey部分。默认情况下,IIS会为每个应用程序自动生成machineKey。这是用于加密/解密表单身份验证票证的内容。如果IIS重新启动,您很可能会在此实例中获得新的计算机密钥,这意味着无法解密该故障单....这意味着用户必须再次登录。通过创建/定义静态密钥,可以防止在IIS回收时更改密钥。有关设置机器密钥的信息可以是found on MSDN here

最后,表单身份验证具有与会话和会话管理相关的 ZERO 。它们是互斥的,在典型情况下不会相互影响。当用户登录时,会向他们提供包含过期时间和用户名的加密cookie。这是 NOT 存储在会话中,因此调整会话设置不会影响用户登录。