在ASP.NET MVC 使用的是 FormsAuthentication 认证
web.config 配置为
<authentication mode="Forms">
<forms loginUrl="~/Account.aspx/LogOn" timeout="2880" />
</authentication>
用户登录时, 添加认证的代码 (因为要在 Cookie 中写入一个 userDataString, 所以搞复杂了些..)
// 创建包含认证用户信息的Cookie
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, true);
// 获得解密后的认证票据
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
// 创建一个新的包含UserData的认证票据
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userDataString);
// 加密新的认证票据
authCookie.Value = FormsAuthentication.Encrypt(newTicket);
// 将认证票据加入Cookie
Response.Cookies.Add(authCookie);
这样的代码在我本机测试时, 没有问题. (Vista + IIS7 + VS2008 asp.net Development Server)
但是部署在一个测试的虚拟主机上, 会出现这样一个问题:
一个用户登录成功后, 添加了AUTH认证的Cookie, 一切正常
但是用户停止请求一段时间, 主机上的 asp.net mvc 程序重启了
在 Application_Start() 和 Application_End() 添加 log 发现会重启
ShutDownMessage 为 HostingEnvironment initiated shutdown (顺便问问这是啥原因)
机器重启后, 用户浏览器仍会发送 Cookie 到服务器
但此时没有通过认证了, 变成了 IsAuthenticated 为 false...
请问: 服务器 asp.net 程序重启后, 之前的 AUTH 认证的 Cookie 就无效了吗??
( 加解密方式变了? 没想通)
( 但是在 VS2008 asp.net Development Server 每次关闭 重启 Cookie 仍然有效的啊)
谢谢~