【问题标题】:Play Framework 1.2.4: Session Doesnt ChangePlay Framework 1.2.4:会话不变
【发布时间】:2012-07-12 13:46:14
【问题描述】:

我正在开发一个 Play Framework 项目,我正在使用 SecureSocial 插件进行用户操作。

我的问题是,根据 Play Framework 文档,当我关闭浏览器选项卡并打开一个新选项卡时,会话应该已经关闭并重置。

但是当我关闭并重新打开选项卡时,我看到会话 ID 仍然相同,并且用户直接登录而无需重新打开登录页面(因为用户信息在播放会话中仍然可用)

这是我打开会话之前和之后的输出:

之前

session = {sid=86, ___ID=80519f26-ccf9-4e6f-9f9a-0f2a3bbc7b20, securesocial.network=userpass, ___AT=4241355a05e419dabc6e16612275b3d932133707, securesocial.user=test}

然后我关闭并在几秒钟后重新打开浏览器选项卡...

之后

session = {___ID=80519f26-ccf9-4e6f-9f9a-0f2a3bbc7b20, sid=86, securesocial.network=userpass, ___AT=4241355a05e419dabc6e16612275b3d932133707, securesocial.user=test}

一切都是一样的。 有时会随机变化

顺便说一句,我在application.conf 或其他任何地方都没有任何会话设置;一切仍处于默认设置。

【问题讨论】:

  • 我的印象是 socialsecure 使用 cookie - 它检查用户之前是否已通过身份验证。因此,除非您继续删除 cookie,否则它不应从头开始(用于验证)
  • 我认为在 SocialSecure.java 内部:调用 checkAccess - 它调用 getUserId(在其中检查 cookie 的用户和提供者)
  • 是的,在 SocialSecure.java 中,cookie 正在使用 sessin.get(...) 从会话中调用。问题是会话没有像它应该的那样改变。
  • 也许我误解了你的问题 - 将再次检查
  • 只是为了我的利益 - 这是哪个浏览器和提供商?

标签: session playframework playframework-1.x securesocial


【解决方案1】:

SocialSecure 使用 cookie - 它检查用户之前是否已通过特定提供商的身份验证。删除 cookie 应该可以让您从头开始测试功能。

在 SecureSocial.java 中(在 controllers.securesocial 中) - 您应该能够检查在 checkAccess 中调用 getUserId 的位置(在其中检查用户和提供者的 cookie 值)。

希望对你有帮助

【讨论】:

  • 我已经看到了这些行,问题是,会话应该已被重置,并且 session.get(...) 在我关闭并重新打开浏览器窗口后应该返回 null。但就我而言,这不会发生。
【解决方案2】:

我意识到这是现代浏览器的一项新“功能”。除非您完全关闭所有选项卡和浏览器本身(在 osx 中,右键单击并关闭),否则浏览器不会关闭会话,因此用户不需要重新登录,直到他们完全关闭浏览器..

简而言之,您的会话不会因关闭“选项卡”而过期,但您必须完全关闭“浏览器”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多