was passiert mit session_start in global.asax, wenn session-timeouts?
Ich habe multidomain web-Anwendung, die behandelt Benutzer unterschiedlich, basierend auf der URL, die Sie verwenden.
Ich bin mit Session["Daten"], um Informationen über die Benutzer-und ab dieser session mit Session_Start["data"] in die Global.asax.
Alles Prima funktioniert, aber ich würde gerne wissen, was passiert, nach Inaktivität. Nach einer gewissen Zeit session-timeout. Wenn das passiert, ist Global.asax, behandeln dies als neuen Benutzer an und wieder starten Session_Start für diesen Benutzer?
Und Session["data"] gibts bei jedem laden der Seite neu laden? Oder weil es startet nur einmal und wird timeout in einige genaue Zeit?
Habe ich versucht, diese Frage so klar wie möglich.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Session erneuern/keep-alive-jedesmal, wenn der server getroffen wird, die von diesem Benutzer.Legen Sie das timeout in der web-config-Datei und es wird ein sliding-Wert, so dass es wieder neu gestartet wird gibt es jedes mal eine server-Anfrage.
etwas wie dieses:
Wenn das Zeitlimit für die Sitzung, das nächste mal gibt es eine Anfrage, die Session_Start ausgeführt wird. Wenn Sie Zugriff auf Session[Daten] aus irgendwo anders im code, sollten Sie überprüfen, um sicherzustellen, es wird nicht null, da es eine NullReferenceException ausgelöst, wenn die Sitzung abgelaufen ist und Sie versuchen, darauf zuzugreifen.
Eine neue Sitzung beginnt, wenn ein Benutzer das erste mal besucht .NET-URL (wie eine .aspx-Seite, aber nicht ein .html-oder andere statische Dateien) auf Ihrer Website. Die Sitzung dauert bis zum Timeout oder die Anwendung gekillt (Neustart/Abstürze/Recycling). Die Standardeinstellung ist .NET-timeout beträgt 20 Minuten; so wird eine Sitzung so lange, wie der Benutzer hält das schlagen .aspx-Seiten mit keine Pausen, die länger als 20 Minuten.
Während dieser Zeit, können Sie Informationen speichern, die in das Session-Objekt, dass sich auf Nutzer. Es ist im wesentlichen eine hashtable, die Sie Auffüllen können mit Objekten, für die Sie die Tasten definieren. In Ihrem Fall, Sie sind mit Session["Daten"], aber Sie können jede Taste, die Sie wollen, wirklich.
Jedoch eine Sitzung, und die Daten, die Sie speichern in die Session hashtable, ist sehr fragil (siehe alle Möglichkeiten, Sie können sterben, siehe oben). Sie sollten nicht darauf verlassen, es zu halten alles, was wichtig ist, kann nicht rekonstruiert werden leicht (Session_Start, zum Beispiel). So ist es wirklich dient zwei Funktionen: die Aufrechterhaltung der Staat (damit Sie wissen, es ist immer noch der gleiche Benutzer von Seite zu Seite); und als einen benutzerspezifischen cache können Sie Daten im Speicher, um Dinge zu tun schnell.
Session_Start läuft nur einmal pro Sitzung--per definition. Wenn Sie brauchen, um zu identifizieren, einen einzelnen Benutzer über mehrere Sitzungen, die Sie verwenden müssen, etwas mehr permanent, wie Sie Ihre eigenen cookie mit einer Fernen Zukunft Ablauf. Sie können eine ID in einem solchen cookie können Sie wissen, ist dieser Benutzer 12345 (in der Tat, Session_Start ist genau der richtige Ort zu suchen für Ihre "dauerhafte" cookie, und verbinden Sie Ihre Daten-etwa, dass die bestehenden Benutzer, die mit dieser neuen Sitzung).
Und wenn Sie wollen, zum speichern von Daten über einen Benutzer, der überlebt, mehrere Sitzungen, haben Sie, um zu speichern, dass Sie irgendwo mehr permanent--eine Datenbank, die die naheliegendste Lösung. Wenn Sie kommen zurück, die Sie Zwischenspeichern können Sie einige der Daten in der Sitzung hashtable--und Session_Start ist genau der richtige Ort, das zu tun, wie gut. Hoffe, das hilft.
protected void Session_Start(object sender, EventArgs e)
{
//Code, der ausgeführt wird, wenn eine neue Sitzung gestartet wird