我的脚本遇到了一个非常奇怪的问题。我有这个脚本,它将作为POST与jQuery一起发布。这是被发送的URL:
url: 'index.php?i=v&p=k&token=<?php echo($tokenS); ?>&key=<?php echo $secretKey; ?>&token=<?php echo $tokenS; ?>&time=<?php echo $time; ?>&stime=<?php echo $stime; ?>'
在行动中,它看起来像这样:
url: 'index.php?i=v&p=k&token=F53A8D1113D8A158AD89F6A115DCB13174F0E0CC&key=56.50.57.61.106.118.118.114.60.49.49.105.113.113.105.110.103.48.101.113.111.61.51.53.58.56.52.53.56.54.55.53&token=F53A8D1113D8A158AD89F6A115DCB13174F0E0CC&time=15&stime=1386236453'
因此,URL包含了我需要验证的所有类型的信息。
当我必须验证key
变量时,问题就来了。我有这个:
$key = inputFilter($_POST['key']);
// Need to decrypt the key.
$key = $this->sDecrypt($_POST['key']);
/*
* Need to split the key up..
* After this, we should have an array looking like this:
* -> Array ( [0] => ID [1] => URL [2] => TIME) <-
* ID = id of the advertisement
* URL = url of the advertisement
* TIME = time of the advertisment started showing (Should match $stime)
*/
$key = explode(';',$key);
$key2 = explode(';',$this->sDecrypt($_SESSION['ad']['key']));
然后,在解密密钥后,我像这样验证它:
// Check if session key & post key is the same
if($key[0] != $key2[0] || $key[1] != $key2[1] || $key[2] != $key2[2])
die("error");
这就是它变得奇怪的地方。我在这里拿到die("error");
。
我试着打印出$key包含的内容:
echo "<pre>";
echo $key[0];
echo "</pre>";
echo "<pre>";
echo $key2[0];
echo "</pre>";
结果是:
$key[0] = �
$key2[0] = 608
因此,$key2[0]
具有正确的值,但$key[0]
没有。它包含某种堰的特征。
编辑:
var_dump( $_POST['key'] );
是NULL
知道为什么吗?
实际上,您的AJAX代码并没有按照您所说的那样张贴值,而是通过GET发送值。当你像你描述的那样建立一个URL时,无论你把请求设置为什么,这些参数都会在GET数组中
不要在$_POST['key']
中查找,而是尝试在$_GET['key']
中查找
或者,如果你真的想要,你可以把它换成$_REQUEST
,它将解析COOKIE->GET->POST
您的变量被发送到URL中的PHP脚本,这是一个GET方法。然而,在您的代码中,您使用的是POST变量:
$key = inputFilter($_POST['key']);
然后解码,这将导致不可预测的,当然是不想要的行为。将其更改为:
$key = inputFilter($_GET['key']);