Относительные ссылки автоматически получают идентификатор сеанса - PullRequest
1 голос
/ 24 марта 2009

Поскольку идентификатор сеанса вставляется в текущий URL-адрес, относительные ссылки также автоматически получают идентификатор сеанса. Другими словами, если пользователь в настоящее время размещен на Page1.aspx и щелкает относительную ссылку на Page2.aspx, относительная ссылка включает идентификатор текущего сеанса в качестве части URL-адреса. Единственным реальным ограничением состояния без файлов cookie является то, что вы не можете использовать абсолютные ссылки, потому что они не будут содержать идентификатор сеанса.

Я не понимаю, почему относительные ссылки могут получить идентификатор сеанса, а не абсолютные ссылки?

Спасибо

Ответы [ 2 ]

5 голосов
/ 24 марта 2009

Если вы используете сеансы без файлов cookie, то идентификатор URL вставляется в URL следующим образом:

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

Как видите, теперь sessionid известен серверу.

2 голосов
/ 24 марта 2009

ASP.NET использует трюк, который анализирует URL-адрес, так что с точки зрения клиента он находится в одном каталоге, поэтому он всегда будет сохранять идентификатор сеанса, не беспокоясь об изменении вашего javascript или внешних файлов javascript и т. Д.

Пример: http://localhost:50311/SomeWebSite/(S(f2rvdgj1bj1nyuzhfeqrvveq))/Page2.aspx

Обычно URL-адрес будет "http://localhost:50311/SomeWebSite/Page2.aspx"", но поскольку веб-клиент (браузер) считает, что идентификатор сеанса является каталогом (/ (S (f2rvdgj1bj1nyuzhfeqrvveq)) /), он с радостью попытается остаться в том же самом каталог.

Таким образом, ASP.NET фактически не обрабатывает выведенные URL-адреса, а клиент просто перенаправляет их.

Если вы хотите, чтобы абсолютные URL-адреса получали идентификатор сеанса, создать тривиальный элемент управления привязки, который проверяет, находится ли целевой URL-адрес в корне вашего приложения, будет тривиально, чтобы вы не передавали этот идентификатор сеанса внешнее приложение, которое не знает, что с ним делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...