【问题标题】:Why is jsessionid appearing in Wicket URLs when cookies are enabled?为什么启用 cookie 时 jsessionid 会出现在 Wicket URL 中?
【发布时间】:2011-10-12 02:34:56
【问题描述】:

我注意到,当用户第一次访问我的网站时,Wicket 生成的 URL 包含 jsessionid,而不是依赖 cookie 来获取会话信息。

cookie 确实设置成功,如果用户只是重新加载页面,jsessionid 将不再附加到 URL。你可以在这里测试一下:pixlshare.com。将鼠标悬停在任何图像链接上将显示带有jsessionid 的 URL;重新加载页面,jsessionids 将被删除。

根据以前使用Wicket SEO page 的经验,我知道如何删除jsessionid 以将其隐藏起来,但对普通用户使用这种技术似乎是一种黑客行为。对于那些偏执到禁用 cookie 的人来说,它还会破坏网站。

这是在最近从 Glassfish 迁移到 Tomcat 之后发生的,但我不能肯定地说这是原因。另外,我在 Tomcat 前使用了 Apache 的 mod_proxy。

【问题讨论】:

    标签: tomcat cookies wicket jsessionid


    【解决方案1】:

    以下是发生的情况:客户端第一次请求页面,根本不发送任何 cookie:

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

    服务器对基于此请求的客户端功能一无所知,特别是它是否支持 cookie。因此,为了更加安全,它发送 both cookie 和在 URL 中编码的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 功能。


    顺便说一句(来自您网站的 JavaScript):

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

    什么是假的

    【讨论】:

    • 许多浏览器会在您进行上传时提供“C:\fakepath\your_file.jpg”作为报告的文件名。 JS 只是将其剥离,以便在上传之前显示文件名的最后一部分。目的是向用户显示文件名(不带路径),以便他们可以看到他们正在上传 FOO.jpg 而不是 BAR.jpg。没有什么邪恶的。 :-)
    • 我明白为什么 Tomcat 会这样做,但为什么 Glassfish 没有这个问题?
    • 啊,我收回我的评论。我刚刚检查了另一个在 Glassfish 上运行的站点,在清除了该站点的 cookie 后,我得到了 jsessionid。
    • 而“如何在 Spring Boot Web 应用程序中禁用它”的答案是“将 server.servlet.session.tracking-modes=cookie 设置为应用程序属性。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2014-03-02
    • 2011-06-08
    • 1970-01-01
    • 2019-09-09
    • 2019-08-05
    相关资源
    最近更新 更多