我注意到,用户第一次访问我的网站时,Wicket生成的URL包含jsessionid,而不是依赖Cookie来获取会话信息。
jsessionid
cookie确实设置成功,并且如果用户只是简单地重新加载页面,jsessionid则该URL将不再追加。您可以在这里进行测试:pixlshare.com。将鼠标悬停在任何图像链接上都会显示带有jsessionid;重新加载页面,jsessionids将被删除。
jsessionids
从Wicket SEO页面的先前经验中,我知道如何jsessionid从bot 中将其隐藏以将其隐藏,但是对于普通用户采用此技术似乎是一种黑客。对于那些偏执狂以致禁用Cookie的人来说,它也会破坏该网站。
这是在最近从Glassfish迁移到Tomcat之后发生的,尽管我不能肯定地说那是原因。另外,我在Tomcat之前使用Apache的mod_proxy。
这是发生的情况:客户端第一次请求页面,根本不发送任何cookie:
$ curl -v http://pixlshare.com/upload
服务器对基于此请求的客户端功能一无所知,尤其是它是否支持cookie。因此,要更加安全,它会发送 两个 cookie并JSESSIONID在URL编码:
JSESSIONID
< Set-Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C; Path=/; HttpOnly ... <a wicket:id="image1Link" href="gallery/OKfzVk;jsessionid=25E7A6C27095CA1F560BCB2983BED17C">
换句话说JSESSIONID,如果客户端不支持cookie,则servlet容器会防御性地附加到每个URL。
那么,为什么在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, '');
什么假的 ?