【发布时间】: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