检查按钮是否被按下(html - > jquery - > php)

时间:2013-01-25 22:13:23

标签: php jquery ajax

我有这个设置: 带有提交按钮的HTML表单 - >检查按钮是否在jquery中按下 - >然后通过$.post(jquery)将输入发送到php页面。

我怎么能在PHP代码中告诉某人是否真的按下了HTML表单中的按钮?我想阻止用户在不通过表单的情况下将$ _POST值提交到php页面。

2 个答案:

答案 0 :(得分:1)

我会做以下事情:

  1. 在表单中有一个隐藏的帖子值,根据当前日期/时间生成随机哈希标记。
  2. 首次提交表单时保存此令牌。 (数据库)
  3. 每当有人尝试提交表单时,随机令牌都会更新,它将是唯一的,因为它将基于时间戳。因此,如果用户通过仅复制令牌和POST数据而不通过表单提交表单,则代码应在PHP端检查该令牌是否已存在于数据库中。如果它确实提示用户友好的错误消息或重定向。如果没有,则更新旧令牌以保留新令牌。
  4. 令牌可以保存在数据库或会话中,具体取决于你想用它们做什么。

答案 1 :(得分:0)

你基本上想要防范CSRF。正如GGio所说,基于会话的令牌是实现这一目标的最佳方式。

if (!isset($_SESSION['token'])) {
    $token = sha1(uniqid(rand(), true) . $_SESSION['user_id']);
    $_SESSION['token'] = $token;
    $_SESSION['token_time'] = time();
}
else{
    $token = $_SESSION['token'];
}

在表单元素中:

<input type = "hidden" name = "token" value = "<?php echo $token; ?>" >

在处理表单之前:

if(isset($_SESSION['token']) && isset($_POST['token']) && $_POST['token'] === $_SESSION['token']){
    //user submitted the form correctly
}
else{
    //something isn't right
}