因为会话 ID 是插入到当前 URL 中的,所以相对链接也会自动获得会话 ID。换言之,如果用户当前驻留在 Page1.aspx 上并单击到 Page2.aspx 的相对链接,则相对链接包括当前会话 ID 作为 URL 的一部分。无 cookie 状态的唯一真正限制是您不能使用绝对链接,因为它们不包含会话 ID。
我不明白为什么相对链接能够获得会话 ID,而不是绝对链接?
谢谢
If you use cookieless sessions, then a session id is inserted into the url like this:
http://www.mysite.com/12345/Default.aspx
Now if you link from default.aspx to: "http://www.mysite.com/dosomething.aspx" (<a href="http://www.mysite.com/dosomething.aspx">...</a>
), the link with the session is lost. If you have used "dosomething.aspx" (<a href="dosomething.aspx">...</a>
) as the link, the browser will resolve this to:
http://www.mysite.com/12345/dosomething.aspx
As you can see, the sessionid now is known to the server.
ASP.NET 使用解析 URL 的技巧,以便从客户端的角度来看,它位于同一目录中,因此它将始终保留会话 ID,而无需担心更改 javascript 或外部 javascript 文件等。
示例: http://localhost:50311/SomeWebSite/(S(f2rvdgj1bj1nyuzhfeqrvveq))/Page2.aspx
通常 URL 是“ http://localhost:50311/SomeWebSite/Page2.aspx ”,但由于 Web 客户端(浏览器)认为会话 id 是一个目录 (/(S(f2rvdgj1bj1nyuzhfeqrvveq))/),它会很乐意尝试留在同一个目录中。
这样,ASP.NET 并没有真正重新解析输出的 url,客户端自动转发它。
如果您希望绝对 URL 获得会话 ID,那么创建一个特殊的锚点控件来验证目标 url 是否位于应用程序的根目录中应该很简单,这样您就不会将该会话 ID 传递给外部应用程序,这不知道该怎么办。