Почему jsessionid появляется в URL-адресах Wicket, когда включены файлы cookie? - PullRequest
10 голосов
/ 24 июля 2011

Я заметил, что при первом посещении пользователем моего сайта сгенерированные Wicket URL-адреса содержат jsessionid, а не полагаются на cookie для получения информации о сеансе.

Cookie действительно устанавливается успешно, и еслипользователь просто перезагружает страницу, jsessionid больше не добавляется к URL-адресам.Вы можете проверить это здесь: pixlshare.com .При наведении курсора на любую из ссылок изображения будет отображаться URL с jsessionid;перезагрузите страницу, и jsessionids будет удален.

Из предыдущего опыта с Wicket SEO-страницей Я знаю, как удалить jsessionid, чтобы скрыть его от ботов, но используяэта техника для постоянных пользователей выглядит как взломать.Это также сломает сайт для тех людей, которые настолько параноидальны, что отключили куки.

Это происходит после недавнего переезда в Tomcat из Glassfish, хотя я не могу с уверенностью сказать, что в этом причина.Кроме того, я использую mod_proxy Apache перед Tomcat.

1 Ответ

18 голосов
/ 24 июля 2011

Вот что происходит: клиент запрашивает страницу в первый раз, вообще не отправляя куки:

$ curl -v http://pixlshare.com/upload

Сервер ничего не знает о возможностях клиента, основываясь на этом запросе, в частности,поддерживает куки или нет.Следовательно, для большей безопасности он отправляет и cookie, и JSESSIONID, закодированные в URL:

< Set-Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C; Path=/; HttpOnly
...
<a wicket:id="image1Link" href="gallery/OKfzVk;jsessionid=25E7A6C27095CA1F560BCB2983BED17C">

Другими словами, контейнер сервлета защищенно добавляет JSESSIONID к каждому URL,на тот случай, если клиент не поддерживает куки.

Так почему JSESSIONID исчезает при втором запросе?Потому что теперь клиент отправляет cookie в HTTP-запросе и сервер знает, что клиент их обрабатывает.При этом JSESSIONID больше не нужен.

$ curl -v -b JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C http://pixlshare.com/upload
> Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C
...
<a wicket:id="image1Link" href="gallery/OKfzVk">

С другой стороны, если клиент не поддерживает файлы cookie, сервер продолжит перезаписывать URL-адреса.

Это неПроблема с калиткой, это функция Tomcat.


КСТАТИ (с вашего сайта JavaScript):

path = path.replace(/^C:\\fakepath\\/i, '');

Что за чертовщина ... 1027 *?

...