在我们的weblogic java ee应用程序中,<cookie-max-age-secs>
param设置为-1(未过期)
weblogic <timeout-sec>
参数设置为1800秒(30分钟)
用户登录然后关闭浏览器(X关闭)。
用户重新打开浏览器(几秒钟后),然后点击 以前的地址。
预期行为:浏览器发送cookie(未过期),Weblogic识别cookie ID,该ID仍与会话关联,允许用户自动登录应用
实际行为:系统会提示用户登录屏幕,并且必须重新登录。
似乎浏览器在浏览器期间(X关闭)使cookie无效,并且不会将其发送到应用程序。
注意:未选中浏览器关闭时清除浏览器缓存。此外,我们不会在浏览器关闭时破坏会话(没有像这样的花哨)
这怎么可能?我在这里遗漏了什么?
使事情变得更加困难:如果您处于开发者模式(F12)并且在关闭(x关闭)并重新打开时您正在捕获请求(网络选项卡),您将自动登录。
相同的测试但行为不同。怎么会这样?
提前致谢。
答案 0 :(得分:1)
浏览器关闭会删除JSESSIONID cookie。
实际行为是期望/预期之一。 这是因为浏览器关闭时浏览器的已删除 。
因此,当您重新打开浏览器并向您的应用程序发送请求时,浏览器不向Web应用程序发送任何cookie(NO JSESSIONID)。因此,系统会提示您登录屏幕。
注意:会话对象仍在内存中,但此时无法访问它。超时后一段时间(你的情况是30分钟),低优先级线程将删除会话对象。
现在让我们考虑奇怪的情况(打开开发者工具):
我敢打赌,您的开发者工具窗口在新窗口中打开,关闭浏览器时此窗口未关闭。这样可以防止删除JSESSIOID。
因此,在这种情况下,您的浏览器会在请求标头中发送JSESSIOID cookie,因为我们之前说过您的会话对象仍在内存中,所以weblogic会接受它。