我有一個用戶在表單身份驗證票證更新且舊錶單過期後被踢出問題。 第一票,我得到當我籤的是:表單身份驗證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