【发布时间】:2015-05-18 15:21:33
【问题描述】:
如果符合条件,我将奖励这个问题 50 分。
我有一个投票系统,类似于在 SO 上的投票方式。
当用户通过<form> 投票时,我希望提交首先点击“get-csrf.php”以获取 CSRF 密钥,然后将该值传递给请求。
我怎样才能做到这一点?
jQuery 代码:
jQuery('.votetopicform').submit(ajaxSubmit_votetopicform);
function ajaxSubmit_votetopicform(){
var votetopicform = jQuery(this).serialize();
jQuery.ajax({
type:"POST",
url: SiteParameters.site_url+"/wp-admin/admin-ajax.php",
data: votetopicform,
success:function(data){
jQuery(".feedback").html(data); // empty div to show returned data
}
});
return false;
}
在get-csrf.php 中,我有返回所需密钥的语句:
if (!isset($_SESSION['csrf'])) {
$_SESSION['csrf'] = substr( md5(rand()), 0, 7);
}
return $_SESSION['csrf'];
所以,当用户点击提交时,我想通过我的 jQuery 代码获取 CSRF,然后将其发送到请求并在那里处理。
【问题讨论】:
-
为什么需要这个预检请求?标准同步器令牌模式是否不够好? en.wikipedia.org/wiki/…
-
@Halcyon 长话短说,所有页面都被缓存(包括表单),所以我需要通过 JS 获取 CSRF 密钥,而不是简单地通过 html 直接在表单中添加密钥...
-
你是在问如何链接请求?
-
@lxalmida 不确定该术语的含义。我在问:在提交表单时,我想点击 get-csrf.php,获取返回的密钥,然后通过表单发送它并在处理表单时使用该值。 (我的JS知识有限,所以这对于知道的人来说应该是一件容易的事)......
标签: javascript jquery forms