启用 cookie 后,为什么 jsessionid 出现在 Wicket URL 中?
我注意到,当用户第一次访问我的网站时,Wicket 生成的 URL 包含 jsessionid
,而不是依赖 cookie 来获取会话信息。
cookie 确实已成功设置,并且如果用户只是重新加载页面,则 jsessionid
不再附加到 URL。您可以在这里测试一下:pixlshare.com。将鼠标悬停在任何图像链接上都会显示带有 jsessionid
的 URL;重新加载页面,jsessionids
将被删除。
根据之前使用 Wicket SEO 页面 的经验,我知道如何删除jsessionid
来对机器人隐藏它,但对普通用户使用这种技术似乎是一种黑客行为。对于那些偏执到禁用 cookie 的人来说,它也会破坏网站。
这是最近从 Glassfish 迁移到 Tomcat 后发生的,尽管我不能肯定地说这就是原因。另外,我在 Tomcat 前面使用 Apache 的 mod_proxy。
I notice that the first time a user visits my site the Wicket-generated URLs contain a jsessionid
, rather than relying on the cookie for session information.
The cookie does get set successfully, and if the user simply reloads the page, the jsessionid
is no longer appended to the URLs. You can test this out here: pixlshare.com. Hovering over any of the image links will show a URL with a jsessionid
; reload the page, and the jsessionids
will be removed.
From previous experience with the Wicket SEO page I know how to remove the jsessionid
to hide it from bots, but employing this technique for regular users seems like a hack. It will also break the site for those people paranoid enough to have cookies disabled.
This is happening after a recent move to Tomcat from Glassfish, though I can't say for certain that that's the cause. Also, I'm using Apache's mod_proxy in front of Tomcat.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
发生的情况是这样的:客户端第一次请求页面,根本不发送 cookie:
服务器不知道基于此请求的客户端功能的任何信息,特别是它是否支持 cookie。因此,为了更加安全,它发送 两者 cookie 和在 URL 中编码的
JSESSIONID
:换句话说,servlet 容器防御性地将
JSESSIONID
附加到每个URL,以防客户端不支持 cookie。那么为什么
JSESSIONID
在第二次请求时消失了?因为现在客户端在 HTTP 请求中发送 cookie,并且服务器知道客户端会处理它们。也就是说,不再需要 JSESSIONID 了。另一方面,如果客户端不支持cookie,服务器将继续重写URL。
这不是 Wicket 问题,而是 Tomcat 功能。
顺便说一句(来自您网站的 JavaScript):
什么是假的?
Here's what happens: the client requests a page for the first time, sending no cookies at all:
The server does not know anything about client capabilities based on this request, in particular whether it supports cookies or not. Hence, to be extra safe, it sends both cookie and
JSESSIONID
encoded in the URL:In other words the servlet container defensively appends
JSESSIONID
to every URL, just in case the client does not support cookies.So why the
JSESSIONID
disappears on the second request? Because now the client sends the cookie in HTTP request and the server knows, that the client handles them. That being said,JSESSIONID
is no longer needed.On the other hand if the client does not support cookies, server will continue to rewrite URLs.
This is not a Wicket issue, this is a Tomcat feature.
BTW (from your website JavaScript):
What the f...ake?