2009-06-18 3 views
1

Wenn ich FormsAuthentication.SetAuthCookie ("John", true) aufruft, wird der Benutzername im Cookie gespeichert?FormsAuthentication-Klasse C#

Was ich herausfinden möchte, ist, wenn die Benutzersitzung abläuft und der Benutzer die Site erneut besucht, wird Request.IsAuthenticated auf true gesetzt, aber woher kommt der Name des Benutzers?

Antwort

3

Sitzungs-Timeout und Authentifizierungs-Timeout sind zwei verschiedene Dinge. Sie können für Sitzungen eine Zeitüberschreitung festlegen, ohne die Authentifizierung zu deaktivieren.

Ja, der Benutzername wird im Authentifizierungscookie gespeichert. Es ist jedoch verschlüsselt.

0

Ab dieser MSDN Seite legt es Formular-Authentifizierung Ticket zu Cookies oder in URL, wenn CookiesSupported ist falsch gesetzt.

Wenn Sie zweites Argument als wahr setzen, ist der Cookie persistent. Wenn der Benutzer das zweite Mal besucht (nach dem Sitzungszeitlimit), erhält Ihre App den Cookie mit auth-ticket und erhält so die Benutzerdetails (soweit ich denken).

Wenn Sie dies nicht geschehen lassen möchte ich denke, entweder das zweite Argument auf false:

FormsAuthentication.SetAuthCookie("john", false); 

oder explizit das Ticket Clearing (und so Cookie):

FormsAuthentication.SignOut(); 

wird Arbeite für dich.

1

Sie können mit Ihrem Browser den Inhalt Ihrer Cookies überprüfen. Zum Beispiel mein Stack über Flow Cookie wie folgt aussieht:

F650CE82F53D2C39C8C06B5F26EB34E20FEAC3585035E2A6E9FA30B8ECF5051F4D9C8 ....

Der Wert eine verschlüsselte Schmiere eines Benutzernamens und möglicherweise die Benutzerrollen.

Der Cookie ist gut, solange Sie es wollen. Es ist nicht an die Sitzung gebunden.

In Ihrem Beispielcode haben Sie ein persistentes Cookie erstellt, so dass es für die Lebensdauer des Cookies gültig ist, selbst wenn Sie Ihren Browser schließen. Wenn der Cookie nun speicherbasiert ist, dauert es so lange, bis Sie Ihren Browser schließen, auch wenn die Ablaufzeit es länger leben lassen würde.

Hier sind die Standardwerte:

<forms loginUrl="Login.aspx" 
      protection="All" 
      timeout="30" 
      name=".ASPXAUTH" 
      path="/" 
      requireSSL="false" 
      slidingExpiration="true" 
      defaultUrl="default.aspx" 
      cookieless="UseDeviceProfile" 
      enableCrossAppRedirects="false" />