2009-03-23 4 views
1

Da die Sitzungs-ID in der aktuellen URL eingefügt wird, erhalten relative Links automatisch auch die Sitzungs-ID. Mit anderen Worten, wenn der Benutzer derzeit auf Page1.aspx stationiert ist und auf einen relativen Link zu Page2.aspx klickt, enthält der relative Link die aktuelle Sitzungs-ID als Teil der URL. Die einzige wirkliche Einschränkung des Status ohne Cookies ist, dass Sie keine absoluten Links verwenden können, da sie die Sitzungs-ID nicht enthalten.Relative Links erhalten automatisch die Sitzungs-ID

Ich verstehe nicht, warum relative Links Sitzungs-ID, aber nicht absolute Links gewinnen können?

Danke

+0

Was ist die Quelle dieses Zitats? –

+0

Pro ASP> NET 3.5 in C# 2008 von Matthew MAcDonald – SourceC

+0

Matthew MAcDonald scheint schließlich kein Profi zu sein. – cdonner

Antwort

5

Wenn Sie Sitzungen ohne Cookies verwenden, dann eine Session-ID in die URL wie folgt eingefügt:

http://www.mysite.com/12345/Default.aspx 

Nun, wenn Sie von Link default.aspx zu: "http://www.mysite.com/dosomething.aspx" (<a href="http://www.mysite.com/dosomething.aspx">...</a>), ist die Verbindung mit der Sitzung verloren. Wenn Sie „dosomething.aspx“ (<a href="dosomething.aspx">...</a>) als Verbindung verwendet haben, lösen der Browser diese an:

http://www.mysite.com/12345/dosomething.aspx 

Wie Sie sehen können, jetzt die sessionid dem Server bekannt ist.

2

ASP.NET verwendet einen Trick, der die URL analysiert, so dass sie sich aus der Sicht des Clients im selben Verzeichnis befindet. Daher behält sie immer die Sitzungs-ID, ohne dass Sie sich um die Änderung Ihrer Javascript- oder externen JavaScript-Dateien usw. kümmern müssen.

Beispiel: http://localhost:50311/SomeWebSite/(S(f2rvdgj1bj1nyuzhfeqrvveq))/Page2.aspx

Normalerweise würde die URL "http://localhost:50311/SomeWebSite/Page2.aspx" sein, aber da der Web-Client (Browser) ist der Meinung, dass die Session-ID ist ein Verzeichnis (/ (S (f2rvdgj1bj1nyuzhfeqrvveq)) /) wird es gerne versuchen in demselben Verzeichnis bleiben.

Auf diese Weise muss ASP.NET die ausgegebenen URLs nicht analysieren, der Client leitet sie automatisch weiter.

Wenn absolute URLs die Sitzungs-ID erhalten sollen, sollte es trivial sein, ein spezielles Anker-Steuerelement zu erstellen, das überprüft, ob sich die Ziel-URL im Stammverzeichnis Ihrer Anwendung befindet, sodass Sie diese Sitzungs-ID nicht weitergeben eine externe Anwendung, die nicht weiß, was damit zu tun ist.