【发布时间】:2016-05-15 20:50:31
【问题描述】:
几天来,我在 Symfony 中遇到了一种奇怪的行为。 我有一个动作,出于某种原因,我需要在会话中将随机值存储为 nonce 形式。 nonce 被传递给 twig 模板以供 ajax 函数使用。
在将 nonce 发送到相应的操作时,会检查差异 nonce 值,因此请求被拒绝。
测试表明,Symfony 执行了两次操作,因此将存储一个新的 nonce,而无需更新前端。我无法确定原因。
经过数百次测试,我发现路线的微小变化可以解决问题,但我不相信这是最终的解决方案,我找不到根本原因。
有人可以帮忙吗?
这是有问题的代码:
/**
*
* Condo Apartments management
*
* @Route("/condo/apartment")
*/
class ApartmentController extends Controller
{
/**
* Index Condo Apartments
*
* @Route("/edit/{id}/{apartment}", name="edit_apartment")
* @Route("/manage/{id}", name="manage_apartments")
* @ParamConverter("apartment", class="RimakishCondominiumBundle:Apartment", options={"mapping":{"apartment"="id"}})
* @Method({"GET", "POST"})
*/
public function indexApartmentsAction( Request $request, Complex $complex, Apartment $apartment=null){
$session = $request->getSession();
$nonce = sha1(uniqid());
if($session->has('nonce')){
$session->remove('nonce');
}
$session->set('nonce', $nonce);
我刚刚将第一条路线更改如下,它起作用了。现在我需要知道这个问题的根本原因。
* @Route("/{id}/{apartment}/edit", name="edit_apartment")
【问题讨论】:
-
我正在使用 Symfony 2.8
-
最简单的原因通常是正确的答案。似乎您的 ajax 函数调用了 URL 两次。您应该调试完整的请求 - 如果通过 ajax 多次调用此方法应该非常明显。
-
谢谢理查德,但那是我测试的一部分。我对服务器-客户端通信进行了严格监控,以确保没有从浏览器发送到服务器的额外查询。我还检查了服务器端相同的 Doctrine 查询数量。请记住,ajax 调用了另一个动作,我修改了路由来解决问题。如果 ajax 有问题,更改路由也无济于事。
标签: php symfony doctrine-orm