DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  DevTrain Camp – Schneller zum .NET 4.0 Developer!

 
Navigationslinks überspringen
Autor:Hannes Preishuber

Login Security Control permanent anmelden

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.

 


Diskutieren Sie in den Foren

ASP konferenz vom 24.-25. Februar 2010 im ehem. IMAX München