Laravel 4.2 - 新的数据库会话“存在”,而不是保存+ jasny / sso

时间:2015-08-28 18:34:49

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

长话短说:我已经攻击了jasny / sso与Laravel合作。它非常有效,除非主/根会话已过期。

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

当SSO服务器上发生'attach'动作并且主/根会话已经过期时,我正在运行Auth :: check()以使会话恢复生命,以便可以正确连接。

我的所有调试都表明一切都正常工作,除了这个细节:

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

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

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

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

额外的调试尝试 -

尝试#1:我已将此跟踪到对尚未进行垃圾回收的过期会话的错误附件。我不明白的是,在呈现不同的会话ID时如何加载此会话。如果这是migrate()或regenerate()方法的结果,则“exists”将设置为false,并且可以正确保存。不知何故,似乎正在更新会话ID而不重置“存在”。

尝试#2:答案一直盯着我。我有点现在了解downvote。 (见下面的答案)

1 个答案:

答案 0 :(得分:0)

当我试图揭示行为背后的机制而不是测试看似简单的解决方案时,我大大过度思考了这一点:

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

编辑:如果包含在Auth :: viaRemember()的if语句中,我可以检查auth是否通过session或cookie / remember发生。如果是,那么然后我想设置"存在"为假。