php会话验证

时间:2012-05-08 10:21:10

标签: php validation session

我想实现用户无法两次发送相同的输入。我使用php脚本提交用户输入。

我的想法是将他的输入保存在一个会话数组中,并且每次他通过数组提交一些检查,如果它与之前已提交的内容相匹配。

代码如下所示:

    //Compare post with what user has posted so far; if the same, exit (spam protection)
    foreach($_SESSION['postarray'][] as $postarray) if($post=$postarray) exit;

    //Save post in session of all other posts
    $_SESSION['postarray'][]=$post;

我收到以下错误:

致命错误:无法使用[]在第32行的/Applications/XAMPP/xamppfiles/htdocs/postish/action/post.php中读取(指的是带有foreach()循环的行)

即使将函数更改为$ _SESSION ['post array'],它也不起作用。

任何帮助非常感谢:)

丹尼斯

3 个答案:

答案 0 :(得分:4)

运算符[]向数组中添加一个新元素。

要获取foreach循环的元素,您必须在没有[]的情况下使用它:

foreach($_SESSION['postarray'] as $postarray)
    if ($post == $postarray) exit;

并注意比较运算符==,它用于检查变量的相等性。

检查$post中是否存在$_SESSION['postarray']的更好选项是使用in_array功能:

if (in_array($post, $_SESSION['postarray'])) exit;

答案 1 :(得分:2)

您不小心使用了分配运算符=而不是比较运算符=====

因此,您需要将if($post=$postarray)替换为if($post == $postarray)

您还需要删除[]中的foreach($_SESSION['postarray'][] as $postarray),因为[]仅在插入新数组元素时使用。

答案 2 :(得分:0)

如果您想阻止用户两次发送相同的数据,您需要查看使用nonce(使用一次的数字)

有几个例子: