我注意到,当用户第一次访问我的网站时,Wicket生成的网址包含jsessionid
,而不是依赖Cookie来获取会话信息。
Cookie已成功设置,如果用户只是重新加载页面,则jsessionid
不再附加到网址。你可以在这里测试一下:pixlshare.com。将鼠标悬停在任何图片链接上都会显示一个jsessionid
的网址;重新加载页面,jsessionids
将被删除。
根据以前使用Wicket SEO page的经验,我知道如何删除jsessionid
以隐藏机器人,但对常规用户使用此技术似乎是一种黑客行为。它也将破坏网站,让那些偏执狂的人足以让cookie被禁用。
这是在最近从Glassfish迁移到Tomcat之后发生的,尽管我不能肯定地说这是原因。另外,我在Tomcat面前使用Apache的mod_proxy。
答案 0 :(得分:18)
以下是发生的情况:客户端首次请求页面,根本不发送任何cookie:
$ curl -v http://pixlshare.com/upload
服务器根据此请求不了解客户端功能,特别是它是否支持cookie。因此,为了更加安全,它会在网址中发送 cookie和JSESSIONID
编码:
< Set-Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C; Path=/; HttpOnly
...
<a wicket:id="image1Link" href="gallery/OKfzVk;jsessionid=25E7A6C27095CA1F560BCB2983BED17C">
换句话说,servlet容器会防御性地将JSESSIONID
附加到每个URL,以防客户端不支持cookie。
那么为什么JSESSIONID
在第二次请求时消失了?因为现在客户端在HTTP请求中发送cookie并且服务器知道客户端处理它们。话虽如此,不再需要JSESSIONID
。
$ curl -v -b JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C http://pixlshare.com/upload
> Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C
...
<a wicket:id="image1Link" href="gallery/OKfzVk">
另一方面,如果客户端不支持cookie,服务器将继续重写URL。
这不是Wicket问题,这是Tomcat功能。
BTW(来自您的网站JavaScript):
path = path.replace(/^C:\\fakepath\\/i, '');
f ... ake 是什么?