1

因为会话 ID 是插入到当前 URL 中的,所以相对链接也会自动获得会话 ID。换言之,如果用户当前驻留在 Page1.aspx 上并单击到 Page2.aspx 的相对链接,则相对链接包括当前会话 ID 作为 URL 的一部分。无 cookie 状态的唯一真正限制是您不能使用绝对链接,因为它们不包含会话 ID。

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

谢谢

4

2 回答 2

5

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.

于 2009-03-24T00:04:47.203 回答
2

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 传递给外部应用程序,这不知道该怎么办。

于 2009-03-24T00:14:03.577 回答