【问题标题】:Laravel 5 Session not persisting reliablyLaravel 5 会话不能可靠地持续存在
【发布时间】:2016-01-27 17:33:20
【问题描述】:

我喜欢这个网站,直到现在都能找到我所有问题的答案。

我在这里有两个 Ajax 事务处理,在第一个事务中,输入的值被放入 Session,第二个事务检索输入的值和以前的事务值,以便知道如何进行。这个说法似乎并不可靠,但它在 90% 的情况下都有效。为什么不可靠?交易成功完成,屏幕显示格式正确。

Session::put('previous', serialize($entry));

示例交易 A; 用户扫描商品 UPC,交易将 UPC 0587 识别为正确,创建 $entry,并回复用户“请将 0587 放入手提箱 3334”

$entry = (object) ['type' => 'UPC', 'text' => '0587'];
Session::put('previous', serialize($entry));

示例交易 B; 用户扫描手提袋,交易识别手提袋 3334 为正确,然后询问上一个交易条目

$previous = (object) unserialize(Session::get('previous', self::UNKNOWN_SERIAL));

超过 90% 的时间 $previous 等于我们想要的(UPC,0587)。有时 $previous 等于事务 A 之前的先前事务的值。$previous 将等于登录后第一个事务的 self::UNKNOWN_SERIAL。

为什么 Session::put(..) 看起来不可靠?

任何帮助将不胜感激。

【问题讨论】:

  • 您能否分享一些关于 A) 您的服务器基础架构和 B) 您正在使用的会话驱动程序的详细信息?
  • 是的,上面的例子发生在我的开发站点上,Ubuntu 14.04.2 LTS,服务器版本:Apache/2.4.7 (Ubuntu)。至于 Session 驱动,在 .env SESSION_DRIVER=file,在 config/session.php 'driver' => env('SESSION_DRIVER', 'file'), 'lifetime' => 120, 'expire_on_close' => true, 'encrypt ' => 假的,
  • 是的,在我的开发环境中,只有一个服务器。
  • 在生产环境中,多台服务器,我们有 .env SESSION_DRIVER=database 可以跨服务器启用相同的会话数据
  • 我认为您会希望在两个环境中使用相同的驱动程序,这样您只能调试会影响生产的问题。如果您在 dev 中切换到 DB 会话,这个问题甚至可能会消失。

标签: php laravel session transactions


【解决方案1】:

原来是一个序列化问题。使用 Request::session()->getId() 更改了这两个事务之间 $entry 的存储;作为密钥的一部分。这已经解决了这个问题。测试表明,使用相同 Request::session() 的其他流内事务会导致此问题。

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 2018-06-25
    • 2015-08-13
    • 2019-01-05
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多