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

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

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

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

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

Ответ 1

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

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

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

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

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

Итак, почему 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.


BTW (со своего сайта JavaScript):

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

Что такое f... ake?