所以我使用$_GET
来抓取网址以便稍后使用,但是当我使用$_GET
时,它不会重定向!
所以这是我的示例代码:
网址:http://localhost/project/active.php/?s=ieugfshd&h=qwuyrbcq&i=1
php代码:
<?php
include 'init.php';
$s = trim($_GET['s']);
$h = trim($_GET['h']);
$i = trim($_GET['i']);
$q = key_check($s,$h,$i);
if($q == 1)
{
header("location:password_active.php");
exit;
}
if($q == 0)
{
header("location:login_failed.php");
exit;
}
?>
编辑:
key_check()函数
function key_check($k1,$k2,$id)
{
$query = mysql_query("select key1 from users where user_id = '$id'");
$key1 =mysql_result($query,0);
$query = mysql_query("select key2 from users where user_id = '$id'");
$key2 =mysql_result($query,0);
$y=strcmp($k1,$key1);
$z=strcmp($k2,$key2);
if($y || $z == 0)
{
return 1;
}
else
{
return 0;
}
}
现在,当我尝试这个时,我得到了“1”,但我得到了
此网页有重定向循环
但我的password_active.php
没有任何重定向。这只是一个HTML页面。
答案 0 :(得分:4)
您用来访问脚本的网址是:
http://localhost/project/active.php/?s=ieugfshd&h=qwuyrbcq&i=1
这会加载active.php
,它会发挥作用,然后尝试发送以下标题:
header("location:password_active.php");
浏览器收到此标头,并尝试通过在查询字符串(password_active.php
字符串)之前的最后一个斜杠之后添加?s=xxx
来解析该相对URL。
所以你的浏览器加载:
http://localhost/project/active.php/password_active.php?s=ieugfshd&h=qwuyrbcq&i=1
再次加载active.php
,再次发挥其作用,然后再次发送相同的标题,并加载此页面:
http://localhost/project/active.php/password_active.php?s=ieugfshd&h=qwuyrbcq&i=1
再次。然后再次。然后再次。经过多次尝试,您的浏览器会理解出现问题并停止。
您应该在HTTP标头中使用绝对URL:
header("Location: /project/password_active.php");
另外,请注意如何根据标准编写HTTP标头。
随机笔记:
$s
和$h
都是密码。您应该hash them,而不是通过网址传递它们。if($y || $z == 0)
不太可能像您想象的那样工作,因为它会在伪代码中被评估为if y or not z
,而您可能希望if not y and not z
进行密码检查。此外,在exit()
标题后调用Location
的好处。你永远不应该忘记这一点,因为它非常重要,如果你忘了它们,可能会在你的脚本中造成一些麻烦。
答案 1 :(得分:1)
尝试删除/ after.file后。像index.php?i = sa