有几天我和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")
答案 0 :(得分:0)
几天前我遇到了类似的问题,正如理查德所说,问题出现在我的应用程序的js部分。 在我的情况下,我使用on()jquery方法,因为我的页面中有动态内容,而事件处理程序是"正在累积"在某些特定情况下。 我不得不使用off()方法,这解决了我的多个ajax调用。
我的代码如下所示:
// A function executed when clicking a button with class ".modal-form"
$('body').on('click', '.modal-form', function (e) {
//...(loading a form in a modal)
//calling a function that initializes my form
initializeForm();
//...
});
要解决我的问题,我必须在我的函数initializeForm中添加$( "body" ).off( "submit", "**" );
以清除所有附加到元素的事件处理程序,其中包含id" my-form"
function initializeForm(){
$( "body" ).off( "submit", "**" ); // I had to add this to avoid sending multiple ajax
//requests in case the button with ".modal-form"
//class has been clicked several times
$('body').on('submit', '#my-form', function(e) {
//...
$.ajax({
// That request was being sent several times
}
});
});
}