【问题标题】:A new JSESSIONID is created on every page refresh but not from all browsers每次页面刷新时都会创建一个新的 JSESSIONID,但并非来自所有浏览器
【发布时间】:2014-10-09 19:03:09
【问题描述】:

我在 Jetty 9.1.5 上使用带有 shiro 插件 1.2.1 的 Grails 2.4.3 问题是每次重新加载页面时都会生成一个新的 JSESSIONID(Shiro 不应该这样做)。

但这真的很奇怪,因为情况并非总是如此: 如果我在 Windows 7 机器上使用 Chrome、Firefox 或 IE,我就会遇到问题。 如果我在装有 Ubuntu 的机器上使用 Chrome 或 Firefox,则行为是正确的(即使重新加载页面,JSESSIONID cookie 也会保留)

我尝试使用其他人在其他帖子中建议的不同 cookie 名称,但这并没有解决问题;每次刷新页面时都会再次生成具有新名称的 cookie。

我在我的 grails 应用程序中使用的 serverURL 的格式是 http://subdomain2.subdomain1.com,正如它所建议的那样(末尾没有斜线)

我检查了来自所有浏览器的请求,它们看起来都一样(除了用户代理之外具有相同的标头)所以我真的不明白为什么服务器在某些情况下每次刷新都会创建一个新会话并且其他一些则没有。

我在“sessionCreated”上有一个 HttpSessionListener 监听器,所以我可以完美地看到它。 ...但我不明白为什么,这让我发疯。 有什么建议?

【问题讨论】:

    标签: session grails jetty shiro


    【解决方案1】:

    我们在使用 Vaadin 和 shiro 时遇到了类似的问题。当 web 应用程序在 url 中使用 JSESSION 时,事情变得一团糟。

    对我们有帮助的是将它添加到 web.xml,告诉网络服务器只使用 cookie 来跟踪会话 ID:

    <session-config>
        <cookie-config>
            <http-only>false</http-only>
        </cookie-config>
        <tracking-mode>COOKIE</tracking-mode>
    </session-config>
    

    【讨论】:

    • 该评论具有误导性 - 这是一个会话配置。参考http-onlysecure
    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 2016-09-14
    • 2019-08-06
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2019-11-04
    相关资源
    最近更新 更多