我正在进行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));
}
请告诉我如何实施登录,以便即使应用重启,用户也不会退出。
答案 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 存储在会话中,因此调整会话设置不会影响用户登录。