Laravel 4.2会话未持续浏览器刷新

时间:2016-08-31 14:20:12

标签: php session laravel-4.2

我在页面上有一个链接,我想阻止用户多次点击(或刷新路线),我需要使用PHP,特别是Laravel 4.2来防止这种情况。*

使用Laravel的内置会话处理Facade,在正在运行的路由的末尾,我向Session添加一个变量

Session::put('preventClick', true);

在方法开始时,我检查Session是否有项目,如果为false,我运行代码**

if (!Session::has('preventClick')) {
     ... CODE ...
}

不幸的是,这不起作用。检查Session::has('preventClick')是否始终评估为false

使用PHP本机$_SESSION['preventClick']完全按预期工作,那么Laravel的Session类为什么不这样做呢?我已尝试在Session::save()之后明确调用Session::put(...)来确认,但它仍然没有按预期运行。***

为了保持一致性,我宁愿将所有内容保留在Laravel框架中。

完整(简化)方法

public function placeOrder() {
    if (!Session::has('preventClick') {
        // ... Some code here ... //
        Session::put('preventClick', true);

        return $someValue;
    }
}

* 注意:我知道单独使用PHP无法实现实际的点击防止,但我希望阻止代码运行。

** 注意:稍后在应用程序中,当我知道不再需要时,我将清除此Session变量。

*** 注意:Laravel Sessions在不同的页面请求/重定向之间以其他方式工作。

修改

我在另一个答案中找到了这个:https://stackoverflow.com/a/26165986/1694116

Laravel中的会话不会将更改视为永久更改,除非您生成响应(这是使用symphony作为其基础的结果)。因此,请确保您的app-> run()正确结束并在刷新之前返回响应。您的问题主要是由代码中某处的die()方法或PHP实例/ worker的意外退出引起的。

如果这是真的,这似乎是一个问题,因为我想阻止代码实际完成一个完整的请求......

0 个答案:

没有答案