【问题标题】:Laravel 4.2 -- New database session "exists", not saving + jasny/ssoLaravel 4.2 -- 新的数据库会话“存在”,不保存 + jasny/sso
【发布时间】:2015-08-29 05:57:19
【问题描述】:

长话短说:我已经破解了 jasny/sso 来与 Laravel 合作。它工作得非常好,除非主/根会话已过期。

我将主要/根身份验证设置为“记住”,因此它可以在会话过期时从 cookie 重新进行身份验证。

当 SSO 服务器上发生“附加”操作并且主/根会话已过期时,我正在运行 Auth::check() 以使会话恢复活力,以便可以正确附加。

我所有的调试都表明一切都按照我的需要工作,除了这个小细节:

“附加”操作生成的新会话永远不会写入数据库,因为 DatabaseSessionHandler 认为它已经存在。它正在运行 UPDATE 而不是 INSERT。

因此,我的 SSO 客户端会话附加到一个不存在的 SSO 服务器会话。

对于我的一生,我不知道为什么它认为这个新会话已经存在,也不知道如何让它正确插入到数据库中。

谁能告诉我为什么新的 Laravel 4.2 会话会被检测为“存在”并在 save() 上运行 UPDATE 而不是 INSERT?

额外的调试尝试 --

尝试 #1:我已将此跟踪到一个尚未被垃圾回收的过期会话的虚假附件。我不明白的是如何在呈现不同的会话 ID 时加载此会话。如果这是 migrate() 或 regenerate() 方法的结果,“exists”将被设置为 false,它会正确保存。不知何故,似乎会话 ID 正在更新而没有重置“存在”。

尝试#2:答案一直盯着我看。我现在有点理解了反对意见。 (见下面我的回答)

【问题讨论】:

  • 不解释就投反对票?优雅的举动。

标签: session laravel laravel-4 single-sign-on


【解决方案1】:

当我试图揭示行为背后的机制而不是测试看似简单的解决方案时,我想得太多了:

如果我在 Session::save() 之前调用 Session::setExists(false),它将正确插入新会话。

编辑:如果包含在 Auth::viaRemember() 的 if 语句中,我可以检查身份验证是否通过会话或 cookie/remember 发生。如果为真,那么我想将“存在”设置为假。

【讨论】:

  • 当 Session 实际上仍然确实存在时,这会导致错误。
  • 已编辑以解决上述评论。
猜你喜欢
  • 2022-09-23
  • 2016-01-29
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 2016-05-23
  • 2017-02-12
  • 2022-11-28
相关资源
最近更新 更多