| 

.NET C# Java Javascript Exception

2
Hallo zusammen,

ich habe eine Frage bzgl. dem Login einer mit dem MVC 3 Framework erstellten Website.

Der Login-/Logout-Mechanismus funktioniert soweit ohne Probleme. Beim Login setze ich ein User-Objekt in einer statischen Klasse, um diese Information überall auslesen zu können. Dazu habe ich zwei mehrere Fragen:

1. Ist das überhaupt so Stand der Dinge oder sollte man das anders lösen?
2. Wenn die Seite zwischenzeitlich geschlossen wurde und der Benutzer sie neu öffnet, wird er durch das beim Login erstellte Cookie erneut authentifiziert. Das User-Objekt ist natürlich null, da die Login-Prozedur nicht durchgeführt wurde. Wie löst man das Problem? Bei meiner Recherche bin ich auf Custom-Attribute gestoßen. Ist auch das Stand der Dinge oder sollte man das anders lösen?

Danke und viele Grüße,
Fabian
24.02.2012
FabianD 43 1 4
1 Antwort
0
Wie setzt Du denn in einer statischen Klasse "ein" UserObjekt, wenn es sich um eine Mehrbenutzerumgebung handelt? Bzw. worin liegt denn Dein konkreter Nutzen, ein UserObjekt in der statischen Klasse abzulegen? Falls es die Angst ist, zuviel Last zu erzeugen, wenn man das Objekt bei jedem Request laden muss, dann würde ich mich eher umschauen, dass meine Hardware mehr leisten kann. Bzw. würde ich mal prüfen wie die Leistungsunterschiede sind.

Zum zweiten Teil Deiner Frage:
Verwendest Du als Authentifizierungsmethode FormsAuthentication? Falls ja, dann kann man z.B. per Global.asax an wichtigen Punkten eingreifen. Folgend mal Beispielcode, wie Du z.B. auf den UserName des Logins zugreifen kannst (Cookie):

Protected Sub Application_AuthenticateRequest(sender As Object, e As EventArgs)
Dim authCookie As HttpCookie = Context.Request.Cookies(FormsAuthentication.FormsCookieName)
If (authCookie IsNot Nothing) Then
Dim authTicket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(authCookie.Value)
Dim myUserName As String = authTicket.Name

'hier jetzt prüfen ob Dein UserObjekt existiert, und ggf. neu setzen'

End If
End Sub


Dies setzt natürlich voraus, dass Du auch ein entsprechenden Cookie beim Login gesetzt hast:

Dim authTicket As New FormsAuthenticationTicket(userLoginName, False, DateTime.Now.AddMinutes(20))
Dim cookie As New HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket))
Response.Cookies.Add(cookie)


Vll. hilft Dir dies ja weiter um einen Ansatz zur Lösung Deines Problems zu bekommen.
26.02.2012
SensenMannLE 1,2k 2 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH