2

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

使用 Laravel 内置的 Session 处理外观,在运行的路线结束时,我将一个变量添加到 Session

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

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

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

不幸的是,这不起作用。检查 ifSession::has('preventClick')总是评估为false

使用 PHP native$_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 会话在不同的页面请求/重定向之间以其他方式工作。

编辑

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

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

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

4

0 回答 0