Wie und Warum werden Sitzungs-IDs in ASP.NET wiederverwendet.

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 899918 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

EINFÜHRUNG

Dieser Artikel beschreibt, wie und warum Microsoft ASP.NET Sitzungs-IDs verwendet werden.

Weitere Informationen

Der Sitzungsstatus für ASP.NET ist eine Technologie, die Sie serverseitige, benutzerspezifische Daten speichern kann. Web-Anwendungen können diese Daten zum Verarbeiten von Anforderungen des Benutzers für den Sitzungszustand instanziiert wurde. Ein Sitzung Zustand Benutzer wird durch eine Sitzungs-ID identifiziert. Die Sitzungs-ID wird bereitgestellt, indem Sie eine der folgenden Methoden:
  • Die Sitzungs-ID gehört ein Cookie, der an den Browser des Benutzers gesendet wird.
  • Die Sitzungs-ID wird im URL eingebettet. Diese Technik ist auch bekannt als eine Sitzung ohne Cookies.
Sitzungs-IDs sind eine 120-Bit-Zufallszahl, die durch eine 20-Zeichenfolge dargestellt wird. Die Zeichenfolge wird formatiert, so dass in einer URL enthalten sein kann und es hat keinen URL-Codierung unterzogen werden. Beispielsweise kann die Zeichenfolge in Sitzungen ohne Cookies verwendet werden. Die am häufigsten verwendete Methode der Bereitstellung von Sitzungs-IDs ist die Verwendung von Cookies zum Speichern der Sitzungs-IDs.

Wenn ein Benutzer zuerst öffnet ihren Webbrowser und wechselt dann zu einer Website ASP.NET Session State implementiert, wird ein Cookie an den Browser mit der Benennen Sie "ASP.NET_SessionId" und einen Wert von 20 Zeichen.

Wenn der Benutzer innerhalb der gleichen DNS-Domäne durchsucht, weiterhin der Web-Browser dieses Cookie an der Domäne zu senden, für die es als Quelle diente.

App1.tailspintoys.com und app2.tailspintoys.com sind beispielsweise sowohl ASP.NET Anwendungen. Wenn der Benutzer zu app1.tailspintoys.com wechselt und dann Goes to app2.tailspintoys.com, beide Anwendungen verwenden die gleiche Cookie und die gleiche Sitzungs-ID zum Nachverfolgen des Sitzungszustand des Benutzers innerhalb der einzelnen Anwendung. Die Anwendungen freigeben den gleichen Sitzungszustand nicht. Die Anwendungen geben nur die Sitzungs-ID.

Aus diesem Grund können Sie Sitzungs-IDs für wiederverwenden. mehrere Gründe. Z. B. Wenn Sie die Sitzungs-IDs verwenden, müssen Sie keinen der folgenden Aktionen ausführen:
  • Erstellen Sie ein neues kryptografisch eindeutige Sitzungs-ID, wenn Sie mit einer gültigen Sitzungs-ID dargestellt werden
  • Erstellen Sie eine neue Sitzungs-ID für jeden ASP.NET-Anwendung, die in einer Domäne ist.
Wenn die Webanwendung eine Anmeldung erfordert und eine Abmeldung Seite oder die Option bietet, empfehlen wir, dass den Sitzungszustand deaktivieren, wenn der Benutzer die Website abgemeldet hat. Um den Sitzungsstatus deaktivieren, können rufen Sie die Session.Abandon -Methode auf. Der Session.Abandon -Methode können Sie die leeren der der Sitzungszustand ohne Warten auf das Sitzungstimeout Status. Standardmäßig diese Timeout ist eine gleitende Ablaufzeit von 20 Minuten. Diese Ablaufzeit wird jedes Mal aktualisiert, die Benutzer sendet eine Anforderung an die Website und stellt das Sitzungs-ID-Cookie. Die Abandon -Methode legt ein Flag fest, in dem Sitzungsobjekt Zustand, der angibt, die Sitzungszustand sollten abgeschafft werden. Das Flag untersucht und dann gehandelt, bei der Ende der Seitenanforderung. Aus diesem Grund kann der Benutzer Sitzungsobjekten innerhalb der Seite verwenden. Nachdem Sie die Abandon -Methode aufrufen. Sobald die Seitenverarbeitung abgeschlossen ist, die Sitzung wird entfernt.

Bei Verwendung des in-Process-Sitzungszustandsmodus werden diese Session State-Objekte in der HttpCache gespeichert. Der HttpCache unterstützt eine Callback-Methode, wenn folgenden Bedingungen erfüllt sind:
  • Ein Cacheeintrag entfernt wird.
  • Der Sitzungszustand-Manager den Session_OnEnd -Ereignishandler aufgerufen, wenn der Cache-Eintrag registriert entfernt.
Wenn der Sitzungs-Status-Manager entfernt Objekt Status einer Sitzung befindet sich im Cache, der HttpCache-Manager Ruft alle registrierten Rückrufe. Dieses Verhalten löst tatsächlich den Session_OnEnd -Ereignishandler.

Wenn Sie aufgeben ein Sitzung, Sitzungs-ID-Cookie vom Browser des Benutzers nicht entfernt wird. Aus diesem Grund so schnell wie die Sitzung war abgebrochen, werden neuen Anforderungen für dieselbe Anwendung die gleiche Sitzungs-ID bleibt jedoch eine neue Session-state -Instanz. Zur gleichen Zeit, wenn der Benutzer eine andere Anwendung innerhalb der gleichen DNS öffnet Domäne, der Benutzer ihre Session-State verloren, nachdem die Abandon -Methode von einer Anwendung aufgerufen wird.

In einigen Fällen sollten Sie nicht wiederverwenden von Sitzungs-ID. Verwenden Sie Fall und Unkenntnis der Auswirkungen von nicht wiederverwenden von Sitzungs-ID, im folgenden Codebeispiel wird eine Sitzung zu verwerfen und das Sitzungs-ID-Cookie zu löschen:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
In diesem Codebeispiel wird vom Server und legt den Sitzungszustand löscht der Zustand Sitzungscookie auf null. Der null-Wert wird effektiv das Cookie vom Browser gelöscht.

Wenn ein Benutzer nicht aus der Anwendung abmelden und das Sitzungstimeout Zustand auftritt, kann die Anwendung der gleichen Session-State weiterhin verwenden. Cookie, wenn der Browser nicht geschlossen wird. Dieses Verhalten bewirkt, dass den Benutzer an geleitet werden die Anmeldeseite und das Sitzungscookie Zustand des Benutzers angezeigt werden. Um zu gewährleisten die eine neue Sitzung-ID wird beim Öffnen der Anmeldeseite (login.aspx), einen null-Cookie zurück an den Client senden. Fügen Sie hierzu ein cookie die Antwort-Auflistung. Dann senden Sie die Auflistung der Antwort zurück an den Client. Die einfachste Möglichkeit Senden Sie ein null-Cookie wird mithilfe der Response.Redirect -Methode. Da die Auflistung der Cookies immer einen Wert für die ASP.NET_SessionId verfügt, können nicht Sie nur testen, ob dieses Cookie vorhanden ist, da Sie eine Schleife Response.Redirect erstellt werden. Sie können eine Abfragezeichenfolge für die Umleitung zur Anmeldeseite festlegen.

Oder, wie im folgenden Codebeispiel wird veranschaulicht, können Sie einen anderen Cookienamen feststellen, ob Sie bereits auf die Anmeldeseite umgeleitet werden. Zur Verbesserung der Sicherheit und um sicherzustellen, dass niemand versucht, die Anmeldeseite zu öffnen, mit einem zweiten Cookie zusammen mit ASP.NET Cookies verwendet im folgenden Codebeispiel wird FormsAuthentication -Klasse, um Cookiedaten verschlüsseln und entschlüsseln. Danach wird im Codebeispiel wird ein Timeout von 5 Sekunden.
private void Page_Load(object sender, System.EventArgs e)
{ 
if( !IsPostBack && 
( Request.Cookies["__LOGINCOOKIE__"] == null ||
Request.Cookies["__LOGINCOOKIE__"].Value == "" ) )
{
//At this point, we do not know if the session ID that we have is a new
//session ID or if the session ID was passed by the client. 
//Update the session ID.

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

//To make sure that the client clears the session ID cookie, respond to the client to tell 
//it that we have responded. To do this, set another cookie.
AddRedirCookie();
Response.Redirect( Request.Path );
}

//Make sure that someone is not trying to spoof.
try
{
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt( Request.Cookies["__LOGINCOOKIE__"].Value );

if( ticket == null || ticket.Expired == true ) 
throw new Exception();

RemoveRedirCookie();
}
catch
{
//If someone is trying to spoof, do it again.
AddRedirCookie();
Response.Redirect( Request.Path );
}


Response.Write("Session.SessionID="+Session.SessionID+"<br/>");
Response.Write("Cookie ASP.NET_SessionId="+Request.Cookies["ASP.NET_SessionId"].Value+"<br/>");
} 

private void RemoveRedirCookie() 
{ 
Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", "")); 
} 

private void AddRedirCookie()
{

FormsAuthenticationTicket ticket = 
new FormsAuthenticationTicket(1,"Test",DateTime.Now,DateTime.Now.AddSeconds(5), false,""); 
string encryptedText = FormsAuthentication.Encrypt( ticket ); 
Response.Cookies.Add( new HttpCookie( "__LOGINCOOKIE__", encryptedText ) );
}

Eigenschaften

Artikel-ID: 899918 - Geändert am: Freitag, 29. März 2013 - Version: 3.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework 1.1
Keywords: 
kbinfo kbhowto kbmt KB899918 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 899918
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com