今天在做phpcookie的实验,按照例子在做,一切都没有问题,就是账户退出上出现了问题。
问题:点击退出后,从logout.php 回到 login.php 这个页面。
在logout.php这个页面中,主要是删除cookie:代码如下
<?php
/**
*
* logout.php
*/
//删除userName和userId两个cookie:使cookie的有效期早于现在
setcookie("userName",time()-1);
setcookie("userId",time()-1);
//跳回login界面
header("Location:login_bac.php");
//header(sprintf("Location:http://%s/php/34/code/login_bac.php",$_SERVER["HTTP_HOST"]));
?>
但是从logout.php跳转到login.php时,firefox报错: Firefox 检测到该服务器正在将此地址的请求循环重定向。 此问题可能是因为禁用或拒绝 Cookie 导致。
解决方法如下:将 logout.php中的
setcookie("userName",time()-1); 改为 setcookie("userName","")
setcookie("userId",time()-1);改为 setcookie("userId","")
就可以了
原因是: 如果把cookie的失效改成当前时间之前,那么在我的login.php中,我需要访问这个cookie,但是firefox34 中,并不会把这个cookie给删除,我查看了 firefox中 cookie部分,发现,这个cookie只会在关闭浏览器后,才被删除。那这边就会出现问题。在我的login.php中,我访问了一个过期的cookie,所以firefox才会报刚才的错误.
接下来,贴上login.php的代码:这里我使用empty来判断userId 这个cookie是否有效
if(!empty($_COOKIE["userId"]))
{
$link = mysql_connect($dbcfg["host"],$dbcfg["uname"],$dbcfg["upass"]);
if(!$link){
die("连接数据库失败");
}
mysql_select_db($dbcfg["db"]);
$sql = sprintf("SELECT userId,userName,userPass FROM it_users where userId = %s",$_COOKIE["userId"]);
$re = mysql_query($sql);
if(mysql_num_rows($re)==1){
$row = mysql_fetch_assoc($re);
setcookie("userName",$row["userName"]);
header("Location:http://".HOST."/php/34/code/success_bac.php");
}
else{
echo("查询失败,请重新登录");
setcookie("userId",time()-10000);
setcookie("userName",time()-10000);
header("Location:http://".HOST."/php/34/code/login_bac.php");
}
mysql_close($link);
}