首页 新闻 赞助 找找看

FormsAuthentication用户丢失认证的问题

0
悬赏园豆:10 [已关闭问题]

在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 仍然有效的啊)

谢谢~

问题补充: 回复 私家侦探 : 嗯 我是初学者, 不过我可没有用微软来”拖拉控件“做网站 :) 如果不用Cookie, 那怎么实现 登录时 的 ”下次记住我“ 的功能? 当然 Cookie 会有加密和校验等措施 不知道我说的对不对 也希望高手指点
flankerfc的主页 flankerfc | 初学一级 | 园豆:0
提问于:2009-04-26 23:16
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册