我的剧本遇到了一个非常奇怪的问题。我有这个脚本,将以jQuery作为POST发布。这是发送的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
知道为什么吗?
答案 0 :(得分:1)
您的变量将发送到URL中的PHP脚本,这是一个GET方法。 但是,在您的代码中,您使用的是POST变量:
$key = inputFilter($_POST['key']);
然后解码,这将导致不可预测的,当然不需要的行为。 将其更改为:
$key = inputFilter($_GET['key']);
答案 1 :(得分:1)
看起来你的AJAX代码并不是像你说的那样发布值,而是通过GET发送它们。当您构建一个类似于描述的URL时,无论您将请求设置为什么,这些参数都将位于GET数组中。
尝试查看$_POST['key']
$_GET['key']
或者,如果您真的想要,可以将其换成$_REQUEST
,这将解决COOKIE的正常优先级 - &gt; GET - &gt; POST