我有一个用户在表单身份验证票证更新且旧表单过期后被踢出问题。 第一票,我得到当我签的是:表单身份验证Cookie替换
票:A094D6F0401A5B6D97688198B09F17B03D209 ............ 结束:星期四,2013年3月28日8时56分33秒GMT
而且经过一段时间后,机票更新,我得到这个cookie:(曲奇到期时,机票到期,所以没有问题)
Ticket:215373E662852AD0CC540AC27F547787 ............. Ends :星期四,2013年3月28日08:58:17 GMT
此票由一个javascript reloader在b用户的背景。现在,如果我更新了页面,我会被踢出去,为什么? 当我再次我用这个票:
var Id = (FormsIdentity)HttpContext.Current.User.Identity;
var Ticket = Id.Ticket;
var NewAuthTicket = FormsAuthentication.RenewTicketIfOld(Ticket);
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(NewAuthTicket), new[] {""});
if (NewAuthTicket != null && NewAuthTicket.Expiration > Ticket.Expiration)
{
// Create the (encrypted) cookie.
var ObjCookie = new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(NewAuthTicket))
{
HttpOnly = true,
Expires = NewAuthTicket.Expiration,
Secure = FormsAuthentication.RequireSSL
};
// Add the cookie to the list for outbound response.
HttpContext.Current.Response.Cookies.Add(ObjCookie);
Ticket = NewAuthTicket;
}
有没有什么解决的呢?
UPDATE:
当我设置cookie的第一次我用这个:
VAR ExpiryDate =与rememberMe!? DateTime.Now.AddMinutes(cookieTimeoutHour):DateTime.Now.AddYears(1);
//create a new forms auth ticket
var Ticket = new FormsAuthenticationTicket(2, ui.UserNr.ToString(CultureInfo.InvariantCulture), DateTime.Now, ExpiryDate, true, String.Empty);
//encrypt the ticket
var EncryptedTicket = FormsAuthentication.Encrypt(Ticket);
//create a new authentication cookie - and set its expiration date
var AuthenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, EncryptedTicket)
{
Expires = Ticket.Expiration,
HttpOnly = true,
Secure = FormsAuthentication.RequireSSL
};
Current.Response.Cookies.Add(AuthenticationCookie);
我尝试过。我在web.config中使用了slidingExpiration =“true”,并且没有使用上面的代码,但是更新了票证,但不是cookie的过期时间。当cookie过期时,用户被踢出。当我使用我的代码时,票证超时和cookie timout被扩展,但用户仍然被踢出。为什么? – mrcode 2013-03-28 09:33:29
使用上面的代码(把它放在一个脚本文件中,它是从站点中每个页面的head标签引用的)。该代码与slidingExpiration =“true”相结合将解决您的问题(当然,您必须检查上面的代码是否比表单票证的超时更频繁地运行) – Nathan 2013-03-28 09:36:28
(以上所有代码都确保用户至少每10分钟打一次网页服务器,从而迫使表格票保持'活着') – Nathan 2013-03-28 09:37:35