2009-06-05 9 views

Antwort

2

Verwenden Sie die folgenden Schritte aus:

<configuration> 
    <system.web> 
    <sessionState cookieless="true" 
     regenerateExpiredSessionId="true" /> 
    </system.web> 
</configuration> 

Und ein citation from MSDN:

ASP.NET hält cookieless Sitzung Zustand, indem sie automatisch eine eindeutige Sitzungs-ID in die URL der Seite eingefügt wird. Zum Beispiel hat die folgende URL von ASP.NET geändert worden die eindeutigen Sitzungs-ID lit3py55t21z5v55vlm25s55 enthalten:

http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx

Wenn ASP.NET sendet eine Seite an den Browser , ändert es keine Links in der Seite, die einen anwendungsbezogenen Pfad verwenden, indem Sie einen Sitzungs-ID-Wert in die Links einbetten. (Links mit absoluten Pfaden werden nicht geändert.) Der Sitzungsstatus wird beibehalten, solange der Benutzer auf diese Weise auf geänderte Links klickt. Wenn jedoch der Client eine URL umschreibt, die von der -Anwendung bereitgestellt wird, kann ASP.NET die Sitzungs-ID nicht auflösen und die Anforderung einer vorhandenen -Sitzung zuordnen. In diesem Fall wird eine neue Sitzung für die Anforderung gestartet.

Alles, was Sie brauchen, um eine neue Sitzung für neue Registerkarte zu öffnen, ist eine URL ohne Sitzungskennung zu öffnen.
EDIT:
Und wie andere Benutzer erwähnt, sollten Sie auf dieses "Kung-Fu" aufpassen. Wenn Sie vertrauliche Informationen in einer Sitzung speichern, geben Sie bitte secure your authentification cookies ein.

EDIT2: Und beachten Sie, dass wenn Sie Sitzungsschlüssel in URL verwenden, die Benutzer es kopieren und an einige Freunde senden können. Und dieser Benutzer und seine Freunde werden die einzelne Sitzung teilen (das wird ein großartiges Feature! :)). Um dies zu vermeiden, können Sie Folgendes tun:
1. Fügen Sie in der onSessionStart-Methode eine Zuordnung zum Benutzer (Benutzerprofil, Speichern in der Datenbank) hinzu und prüfen Sie sie bei BeginRequest.
2. Überprüfen Sie den Referrer und erstellen Sie eine neue Sitzung (Weiterleitung an die sessionlose URL), wenn der Referrer leer ist oder nicht der aktuellen Domäne entspricht (beachten Sie jedoch, dass der Referrer manuell gesetzt werden kann).
3. Erneutes Generieren der Sitzungs-ID und Verknüpfung es mit dem Benutzernamen und ip/mac (xor oder so ähnlich). Und überprüfen Sie dies auf der Bühne, wenn die Sitzung abgeholt wird.
4. Etwas anderes, um diesen Sitzungsschlüssel nur für den aktuellen Benutzer gültig zu machen.

+0

Die Verwendung von Sitzungen ohne Cookies führt zu einem wirklich schrecklichen Sicherheitsproblem, ich glaube nicht, dass es jemals benutzt werden sollte. – meandmycode

+2

Nicht sehr einfach, viel schwieriger .. cookieless Sitzungen beschädigen die URLs der Website, und schlimmere Kunden nicht erkennen, dass, wenn sie die URL kopieren und einfügen .. sie verlosen ihre Sitzung .. etwas, das nicht passiert mit normalen Sitzungen .. da Benutzer ihre Cookie-Werte nicht ignorieren können. Die wahrscheinlichste Ursache für das Stehlen von Sitzungen ist über XSS auf der Website. – meandmycode

+0

Ist es schwer, in der onSessionStart-Methode eine Verbindung zum Benutzer hinzuzufügen? Ist es schwierig, den Referrer zu überprüfen und eine neue Sitzung zu erstellen, wenn der Referrer leer ist oder nicht mit der aktuellen Domain übereinstimmt? Ist es schwer, die Generation der Sitzungs-ID neu zu schreiben und sie dem Benutzernamen und der IP-Adresse zuzuordnen? Es gibt viele Möglichkeiten, Fälle zu beheben, wenn Benutzer kopieren und den Link jemandem geben. Wir können immer einen großen glänzenden Knopf hinzufügen "aktuelle URL in den Puffer kopieren". Über XSS scheint es mir, dass Sie ein wenig darüber wissen. Wenn Sie ein XSS-Loch haben, können ALLE Cookies gestohlen werden. Sie sollten viel mehr auf Auth Cookie achten. – zihotki

1

Der Sitzungscookie wird in einem flüchtigen Speicher gehalten, der für diese Instanz des Browsers zugänglich ist. Sie würden einen Browser benötigen, der das Konzept unterstützt, nach dem Sie suchen, kein solcher Browser existiert meines Wissens.

In ASP.NET können Sie eine Sitzung ohne Verwendung eines Sitzungscookies führen, es ist wirklich hässlich und ich würde es nicht empfehlen, aber es könnte eine Möglichkeit für Sie sein, Ihr Ziel zu erreichen.

+0

@Downvoter: Bitte erklären? – AnthonyWJones

Verwandte Themen