相对链接自动获得会话ID

时间:2009-03-23 23:11:10

标签: c# .net asp.net session storage

  

由于会话ID已插入当前URL,因此相对链接也会自动获取会话ID。换句话说,如果用户当前驻留在Page1.aspx上并单击指向Page2.aspx的相对链接,则相对链接将当前会话ID包含在URL中。 cookieless状态的唯一真正限制是您不能使用绝对链接,因为它们不包含会话ID。

我不明白为什么相对链接能够获得会话ID,但不能获得绝对链接?

谢谢

2 个答案:

答案 0 :(得分:5)

如果您使用无Cookie会话,则会将会话ID插入到网址中,如下所示:

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

现在,如果您从default.aspx链接到:“http://www.mysite.com/dosomething.aspx”(<a href="http://www.mysite.com/dosomething.aspx">...</a>),则会话链接将丢失。如果您使用“dosomething.aspx”(<a href="dosomething.aspx">...</a>)作为链接,浏览器会将其解析为:

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

如您所见,现在服务器已知会话ID。

答案 1 :(得分:2)

ASP.NET使用一种解析URL的技巧,以便从客户端的角度来看它位于同一目录中,因此它始终保留会话ID,而不必担心更改javascript或外部javascript文件等。 / p>

实施例: http://localhost:50311/SomeWebSite/(S(f2rvdgj1bj1nyuzhfeqrvveq))/Page2.aspx

通常网址为“http://localhost:50311/SomeWebSite/Page2.aspx”,但由于网络客户端(浏览器)认为会话ID是一个目录(/(S(f2rvdgj1bj1nyuzhfeqrvveq))/),它会很乐意尝试保持相同。目录

这样,ASP.NET实际上没有重新分析输出的网址,客户端会自动转发它。

如果您希望绝对URL获得会话ID,那么创建一个特殊的锚控件应该是微不足道的,该控件可以验证目标URL是否位于应用程序的根目录中,因此您不会将该会话ID传递给外部应用程序,它不知道如何处理它。