我的网站在我的开发框中按预期工作。也就是说,formauthentication票证在30天后到期。这是通过以下代码
实现的string roles = UserManager.getAuthenticationRoleString(txtUsername.Text);
HttpCookie formscookie = FormsAuthentication.GetAuthCookie(txtUsername.Text, true);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(formscookie.Value);
FormsAuthenticationTicket newticket = new FormsAuthenticationTicket(1, ticket.Name, DateTime.Now, DateTime.Now.AddDays(30), true, roles, ticket.CookiePath);
HttpCookie newCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(newticket));
newCookie.Expires = DateTime.Now.AddDays(30);
Response.Cookies.Add(newCookie);
我用fiddler检查过期设置是否正确,我得到了这个
.ASPXAUTH=84AB5430CF4B1C5F9B59C9285288B41F156FCAFA2A169EACE17A7778A392FA69F66770FD8A08FFD06064B00F0BD788FEEC4A5894B7089239D6288027170A642B3B7EB7DB4806F2EBBCF2A82EE20FD944A38D2FE253B9D3FD7EFA178307464AAB4BCB35181CD82F6697D5267DB3B62BAD; expires=Thu, 21-Jan-2010 18:33:20 GMT; path=/; HttpOnly
所以我希望它能在30天后过期......但它只需要30分钟。
我还有其他3个关于我的环境/代码的有趣花絮
在生产方框中,有两个站点指向相同的代码,一个用于外部访问,另一个用于内部访问
当我因为过早过期而获得登录页面时,.ASPAUTH cookie仍然存在并发送到浏览器
global.asax中有一些角色检查,如下所示
-
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
// Get the stored user-data, in this case, our roles
string userData = ticket.UserData;
string[] roles = userData.Split('|');
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
}
}
}
}
答案 0 :(得分:2)
您需要将机器密钥标记添加到web.config文件中。它正在重新生成并导致你的过早超时。
这类似于以下问题:
答案 1 :(得分:0)
如果问题是生产盒上的用户被踢,并且必须通过FormsAuthentication再次登录,则问题可能是IIS相关而不是.NET。
我遇到了问题,之前应用程序中的所有超时设置都没有起作用,并且用户太早启动了。
检查网站和应用程序池的IIS设置。两者都有与超时相关的设置等。
如果是II6:
要进行调试,您可以禁用池上的所有运行状况和性能检查,但要非常小心,因为如果应用程序失控,这可能会限制您的服务器。
您也可以尝试将超时设置放在web.config中:
<system.web>
<authentication mode="Forms">
<forms timeout="XXXXX"/>
</authentication>
</system.web>
无论如何只是来自类似问题的个人经验的一些想法。希望它可能有所帮助!