1

我想通过使用 Symfony Lock 组件来防止用户两次发出相同的请求。因为现在用户可以点击链接两次(意外?)并创建重复的实体。我想使用不能防止竞争条件本身的唯一实体约束。

Symfony Lock 组件似乎没有按预期工作。当我在页面的开头创建一个锁并同时打开该页面两次时,两个请求都可以获取锁。当我在标准和隐身浏览器窗口中打开测试页面时,第二个请求没有获得锁。但是我在文档中找不到任何关于此链接到会话的内容。我在一个新项目中创建了一个小测试文件来隔离问题。这是使用 php 7.4 symfony 5.3 和 lock 组件

<?php

namespace App\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Routing\Annotation\Route;

class LockTest extends AbstractController
{
    /**
     * @Route("/test")
     * @Template("lock/test.html.twig")
     */
    public function test(LockFactory $factory): array
    {
        $lock = $factory->createLock("test");

        $acquired = $lock->acquire();

        dump($lock, $acquired);

        sleep(2);

        dump($lock->isAcquired());

        return ["message" => "testing"];
    }
}
4

0 回答 0