Laravel 4.2 -- 新数据库会话 "exists",不保存 + jasny/sso
Laravel 4.2 -- New database session "exists", not saving + jasny/sso
长话短说:我已经入侵 jasny/sso 以与 Laravel 一起工作。它工作得非常好,除非 primary/root 会话已过期。
我将 primary/root 身份验证设置为 "remember",因此它可以在会话过期时从 cookie 重新进行身份验证。
当 SSO 服务器上发生 'attach' 操作并且 primary/root 会话已经过期时,我正在 运行ning Auth::check() 恢复会话生活,以便它可以适当地附加。
我的所有调试都表明除了这个小细节外,一切都完全按照我的需要工作:
'attach' 操作生成的新会话永远不会写入数据库,因为 DatabaseSessionHandler 认为它已经存在。它是 运行更新而不是插入。
因此,我的 SSO 客户端会话附加到一个不存在的 SSO 服务器会话。
对于我的生活,我无法弄清楚为什么它认为这个新会话已经存在,也不知道如何让它正确插入数据库。
谁能告诉我为什么新的 Laravel 4.2 会话会被检测为 "exists" 和 运行 UPDATE 而不是 INSERT on save()?
额外的调试尝试 --
尝试 #1:我已将其追踪到一个错误的附件,该附件指向一个尚未被垃圾回收的过期会话。我不明白的是在呈现不同的会话 ID 时如何加载此会话。如果这是 migrate() 或 regenerate() 方法的结果,"exists" 将被设置为 false,并且它会正确保存。不知何故,似乎会话 ID 正在更新而没有重置 "exists"。
尝试 #2:答案一直盯着我看。我 有点 现在理解反对票了。 (见下面我的回答)
当我试图揭示行为背后的机制而不是测试看似简单的解决方案时,我对这个问题的思考严重过度:
如果我在 Session::save() 之前调用 Session::setExists(false),它将正确插入新会话。
编辑:如果包含在 Auth::viaRemember() 的 if 语句中,我可以检查身份验证是否通过会话或 cookie/remember 发生。如果为真,那么 我想将 "exists" 设置为假。
长话短说:我已经入侵 jasny/sso 以与 Laravel 一起工作。它工作得非常好,除非 primary/root 会话已过期。
我将 primary/root 身份验证设置为 "remember",因此它可以在会话过期时从 cookie 重新进行身份验证。
当 SSO 服务器上发生 'attach' 操作并且 primary/root 会话已经过期时,我正在 运行ning Auth::check() 恢复会话生活,以便它可以适当地附加。
我的所有调试都表明除了这个小细节外,一切都完全按照我的需要工作:
'attach' 操作生成的新会话永远不会写入数据库,因为 DatabaseSessionHandler 认为它已经存在。它是 运行更新而不是插入。
因此,我的 SSO 客户端会话附加到一个不存在的 SSO 服务器会话。
对于我的生活,我无法弄清楚为什么它认为这个新会话已经存在,也不知道如何让它正确插入数据库。
谁能告诉我为什么新的 Laravel 4.2 会话会被检测为 "exists" 和 运行 UPDATE 而不是 INSERT on save()?
额外的调试尝试 --
尝试 #1:我已将其追踪到一个错误的附件,该附件指向一个尚未被垃圾回收的过期会话。我不明白的是在呈现不同的会话 ID 时如何加载此会话。如果这是 migrate() 或 regenerate() 方法的结果,"exists" 将被设置为 false,并且它会正确保存。不知何故,似乎会话 ID 正在更新而没有重置 "exists"。
尝试 #2:答案一直盯着我看。我 有点 现在理解反对票了。 (见下面我的回答)
当我试图揭示行为背后的机制而不是测试看似简单的解决方案时,我对这个问题的思考严重过度:
如果我在 Session::save() 之前调用 Session::setExists(false),它将正确插入新会话。
编辑:如果包含在 Auth::viaRemember() 的 if 语句中,我可以检查身份验证是否通过会话或 cookie/remember 发生。如果为真,那么 我想将 "exists" 设置为假。