Das Login Control con ASP.NET 2.0 erlaubt es über die Option DisplayRememberMe=true dem Benutzer die Option einer dauerhaften Anmeldung zu geben. Dabei wird ein Cookie erstellt mit einer Lebenszeit von 50 Jahren. Aus Sicherheitsgründen hat Microsoft in der finalen Version von ASP.NET 2.0 ( gegenüber Beta 2) die Lifetime auf sensationelle 20 Minuten verkürzt. Das heist wenn man das Browser Fesnter schliesst und nach 21 Minuten wieder öffnet, muss man sich erneut anmelden. Anders ausgedrückt: dauerhaftes bzw persistent Login geht nicht mehr.
Neben dieser Änderung gibt es noch ein paar kleine aber gemeine Änderungen auf die ich bisher gestossen bin (siehe mein Weblog : http://weblogs.asp.net/hpreishuber/archive/2005/10/12/427324.aspx)
Nun zum Workaround. Im LoggedIn Event des Login Controls kann man einfach den Cookie neu erstellen und damit den 20 Minuten Cookie überschreiben.
Protected Sub Login1_LoggedIn(ByVal sender As Object, ByVal e As System.EventArgs) If CType(sender, Login).RememberMeSet Then Dim ticket As New FormsAuthenticationTicket(2, CType(sender, Login).UserName, DateTime.Now, DateTime.Now.AddYears(50), True, "", FormsAuthentication.FormsCookiePath) Dim ticketEncrypted As String = FormsAuthentication.Encrypt(ticket) Dim cookie As HttpCookie = New HttpCookie(FormsAuthentication.FormsCookieName, ticketEncrypted) cookie.HttpOnly = True cookie.Path = FormsAuthentication.FormsCookiePath cookie.Secure = FormsAuthentication.RequireSSL cookie.Expires = ticket.Expiration Response.Cookies.Clear() Response.Cookies.Add(cookie) End If End Sub |
Danke an dieser Stelle an meinen Kollegen Olaf Lüder der dieses Problem als Bug gemeldet hat. Dort ist auch der C# Code beinhaltet. http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=3d3568a8-1000-430e-a3b8-40596bc7197d
Der angeführte Workaround des Development Teams (<forms timeout="43200" />) funktioniert übrigens nicht.