登录脚本PHP上的重定向循环
我有一个登录系统,每当用户成功登录时,就会使用其用户名密码和一些其他变量创建一些cookie,这些变量放在url中用于配置会话:登录脚本PHP上的重定向循环,php,redirect,cookies,login,Php,Redirect,Cookies,Login,我有一个登录系统,每当用户成功登录时,就会使用其用户名密码和一些其他变量创建一些cookie,这些变量放在url中用于配置会话: setcookie("username", $myusername); //Sets a cookie storing the username setcookie("password", $mypassword); //Sets a cookie storing the encrypted value of the password setcookie("typeO
setcookie("username", $myusername); //Sets a cookie storing the username
setcookie("password", $mypassword); //Sets a cookie storing the encrypted value of the password
setcookie("typeOfUser",$type); //example variable
变量通过URL传递:
header("location:http://www.example.com/logged.php?type=".$type);
在logged.php页面中,我有一个名为protect.php的文件,它检查cookies是否存在以及它是什么类型的用户
if(isset($_COOKIE["username"])&&isset($_COOKIE["password"])){
//check if this user's cookies exist on the DB
$user = $_COOKIE["username"];
$pass = $_COOKIE["password"];
$sql="SELECT * FROM USERS WHERE Usr='".$user."' and Pass='".$pass."';";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
if($count==1){
$type = $_COOKIE["type"];
header("location:logged.php?type=".$type);
exit();
}
else{
header("location:http://www.example.com/login.php");
}
}
因此,如果用户只是键入www.example.com/logged.php,他/她将获得与其用户相关联的变量,但每当我这样做时,我就会在站点上得到一个重定向循环。(在我看来,有点明显的是,每次它转到报头时都会重定向原因(“位置…它会重新启动,并在顶部检查protect.php…但我想不出解决这个问题的方法)
注意logged.php的顶部有一个:
include("protect.php");
提前感谢!此脚本无限循环的原因基于以下逻辑:
if($count==1){
header("location:logged.php?type=".$type);
}
else{
header("location:http://www.example.com/login.php");
}
无论此时$count
的值是多少,您的脚本都会发送一个位置头。换句话说,无论$count
是否等于1,浏览器都会收到重定向
if(isset($_COOKIE["username"])&&isset($_COOKIE["password"])){
结合这一行,您的循环被定义。如果用户定义了这些Cookie,这将计算为真,这发生在他们第一次登录时,或者已经登录。如果他们登录,他们的用户名和密码必须有效,$count
将最终为1,因为他们在数据库中。
简言之,每次用户登录后转到logged.php
,都会运行此脚本,因为他们拥有适当的cookie,并且再次被引导到“logged.php?type=。“$type”
(一次又一次),因为他们是有效用户,并且存在于数据库中
要解决此问题,您需要在每次运行protect.php
时停止运行header(“location:logged.php?type=“.$type”);
。这是问题的本质。您可以随心所欲地解决此问题,但我会使用会话
查看以了解如何在登录脚本中实现会话
您已经有三个COOKIE:用户名
、密码
、和类型用户
。您拥有的系统运行良好,但大多数身份验证脚本使用会话,可以像COOKIE一样访问($\u COOKIE['foo']),但改用$\u SESSION变量。使用SESSION的优点是,除了服务器/站点上的脚本之外,存储在会话中的值不可供任何人查看或编辑。一般来说,向用户公开的信息越少越好。如果需要说明,请查看或查看上的基本示例
还有一点需要指出的是,在您的脚本中,if(isset($\u COOKIE[“username”])和&isset($\u COOKIE[“password”])){
没有else语句。如果未定义其中一个或两个cookie,则不会执行任何代码,并且我假设将公开显示受保护的页面。您可能需要添加一个else
语句,大致如下:
else{
header("location:http://www.example.com/login.php");
}
希望您能够使此脚本功能强大!此脚本无限循环的原因基于以下逻辑:
if($count==1){
header("location:logged.php?type=".$type);
}
else{
header("location:http://www.example.com/login.php");
}
无论此时$count
的值是多少,您的脚本都会发送一个位置头。换句话说,无论$count
是否等于1,浏览器都会收到重定向
if(isset($_COOKIE["username"])&&isset($_COOKIE["password"])){
结合这一行,您的循环被定义。如果用户定义了这些Cookie,这将计算为真,这发生在他们第一次登录时,或者已经登录。如果他们登录,他们的用户名和密码必须有效,$count
将最终为1,因为他们在数据库中。
简言之,每次用户登录后转到logged.php
,都会运行此脚本,因为他们拥有适当的cookie,并且再次被引导到“logged.php?type=。“$type”
(一次又一次),因为他们是有效用户,并且存在于数据库中
要解决此问题,您需要在每次运行protect.php
时停止运行header(“location:logged.php?type=“.$type”);
。这是问题的本质。您可以随心所欲地解决此问题,但我会使用会话
查看以了解如何在登录脚本中实现会话
您已经有三个COOKIE:用户名
、密码
、和类型用户
。您拥有的系统运行良好,但大多数身份验证脚本使用会话,可以像COOKIE一样访问($\u COOKIE['foo']),但改用$\u SESSION变量。使用SESSION的优点是,除了服务器/站点上的脚本之外,存储在会话中的值不可供任何人查看或编辑。一般来说,向用户公开的信息越少越好。如果需要说明,请查看或查看上的基本示例
还有一点需要指出的是,在您的脚本中,if(isset($\u COOKIE[“username”])和&isset($\u COOKIE[“password”])){
没有else语句。如果未定义其中一个或两个cookie,则不会执行任何代码,并且我假设将公开显示受保护的页面。您可能需要添加一个else
语句,大致如下:
else{
header("location:http://www.example.com/login.php");
}
希望你能够使这个功能和真棒