做了一个免费看小说的网站,结果出了一个非常怪异的问题,就是登录以后,无论如何也退不出去(大约有几次却可以退出),goole,baidu,csdn上N多的帖子和解决办法都试过了,还是不行,实在没辙了,各位大大救命啊!网站名字是第二中文网,地址是 http://www.dearzw.com ,大家可以去实际操作一下看看。下面贴出几段相关的代码:login.php
<?php
header("Content-Type:text/html; charset=utf-8");
session_start();
require_once('database.php');
if(isset($_POST['u'])){
$user = $_POST['u'];
$pwd = md5($_POST['p']);
}else if (isset($_COOKIE['user']) && !empty($_COOKIE['user'])){
$userInfo = explode(',',$_COOKIE['user']);
$user = isset($userInfo[0]) ? $userInfo[0] : '';
$pwd = isset($userInfo[1]) ? $userInfo[1] : '';
} else{
return ;
}
$msg= '';
$db = new Database();
$userdata = $db->query("select uid from user where uname='".$user."' and pwd = '".$pwd."'");
$userid = each($userdata);
$count = count($userid[1]);
if(!$count>0) {
$msg= 'error';
} else {
$_SESSION["user"]=$user;
if (isset($_POST['a']) && $_POST['a'] =='true'){
setcookie("user", $_POST['u'].','.md5($_POST['p']), time()+60*60*24*1000,'/','.dearzw.com');
}
$msg= 'ok';
}
if (isset($_POST['f']) && $_POST['f'] == 1){
echo $msg;
}
?>
logout.php
<?php
session_start();
setcookie("user",null);
setcookie("PHPSESSID",null);
$_SESSION['user']=null;
unset($_SESSION['user']);
unset($_COOKIE['user']);
session_destroy();
header("Set-Cookie:user=");
header("location:index.php");
?>
退出时调用的JavaScriptfunction doQuit(){
delCookie("user");
$.get("/logout.php");
}
<?php
header("Content-Type:text/html; charset=utf-8");
session_start();
require_once('database.php');
if(isset($_POST['u'])){
$user = $_POST['u'];
$pwd = md5($_POST['p']);
}else if (isset($_COOKIE['user']) && !empty($_COOKIE['user'])){
$userInfo = explode(',',$_COOKIE['user']);
$user = isset($userInfo[0]) ? $userInfo[0] : '';
$pwd = isset($userInfo[1]) ? $userInfo[1] : '';
} else{
return ;
}
$msg= '';
$db = new Database();
$userdata = $db->query("select uid from user where uname='".$user."' and pwd = '".$pwd."'");
$userid = each($userdata);
$count = count($userid[1]);
if(!$count>0) {
$msg= 'error';
} else {
$_SESSION["user"]=$user;
if (isset($_POST['a']) && $_POST['a'] =='true'){
setcookie("user", $_POST['u'].','.md5($_POST['p']), time()+60*60*24*1000,'/','.dearzw.com');
}
$msg= 'ok';
}
if (isset($_POST['f']) && $_POST['f'] == 1){
echo $msg;
}
?>
logout.php
<?php
session_start();
setcookie("user",null);
setcookie("PHPSESSID",null);
$_SESSION['user']=null;
unset($_SESSION['user']);
unset($_COOKIE['user']);
session_destroy();
header("Set-Cookie:user=");
header("location:index.php");
?>
退出时调用的JavaScriptfunction doQuit(){
delCookie("user");
$.get("/logout.php");
}
以前js是这么写的function doQuit(){
delCookie("user");
$.get("/logout.php");
location.reload();
}
一样没有效果
session_start();
setcookie("user",null);
setcookie("PHPSESSID",null);
$_SESSION['user']=null;
unset($_SESSION['user']);
unset($_COOKIE['user']);
session_destroy();
header("location:logout.php");
?>改成这样试试。
session_unset();
这样不行,现在logout.php改成下面这样了,好像在ie里面可以了,但是firefox依然不行。 <?php
2 session_start();
3 $_SESSION['user']=null;
4 $_COOKIE['user']=null;
5 unset($_SESSION['user']);
6 unset($_COOKIE['user']);
7 session_unset();
8 session_destroy();
9 session_regenerate_id();
10 setcookie("user",'', time() - 3600*24,"/");
11 ?>
不过不知道你的
setcookie("user",'', time() - 3600*24,"/");
是为哪般
应该是
setcookie(session_name(),'', time() - 3600*24,"/");
session_name()取得的值就是“user”,所以两者是一样的效果,我换成session_name()也不行。
session_start();
setcookie("user",null);
setcookie("PHPSESSID",null);
$_SESSION['user']=null;
unset($_SESSION['user']);
unset($_COOKIE['user']);
session_destroy();
header("Set-Cookie:user=");
header("location:index.php?t=".time());
?>
session_start();
unset($_SESSION['user']);
setcookie("user", '', 1000,'/');
其实一般session_destroy()就行了,我怀疑你ajax发送请求到session删除页面,有的浏览器认为是另外一个会话,这样session_start()启动的是另一份session文件
实在不行,你可以试试这样
function doQuit(){
delCookie("user");
$.get("/logout.php?sess_id=当前的session_id");//把session id通过url传过去
}然后在logout.php
<?php
session_id($_GET['sess_id']);//保证启动相同的会话
session_start();
session_destroy();
?>
有可能是缓存的问题.
logout.php中,加入
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
delCookie("user");
$.get( "/logout.php?t="+(Date.parse(new Date())) );
}
直接调用logout.php也不行,现在代码还没改,你可以试一下
试试直接链接,然后试试jakey的方案
因为服务器环境是linux+nginx,本地没有环境,所以没有在本地测试。
在logout.php画面上echo $_SESSION['user']的结果是空的,但是到前台后不知道什么原因就又有值了
估计还是cookie的问题,因为我的处理步骤是,退出时通过logout.php 清除cookie和session变量,完了页面跳转到主页,主页打开时会自动执行login.php,login.php里面会检测cookie中是否保存有用户的登录信息,如果有的话,就自动登录,没有就什么也不做。
现在问题是在logout.php画面上echo $_SESSION['user']的结果是空的,但是页面跳转到主页时,不知道为何就自动登录了。
logout.php已经完成了清除的使命.
这主要多测试,一步一步的来,建议以写日志的形式,追踪问题出现的地方,不是三言二语能说明的.
查明出现问题的位置更重要,要不始终是走弯路.
利用工具,追踪数据.做网页抓取的时候,都是一步一步来做的.
这方面ff做的比较好!
手动删除客户端cookie以后,再退出就可以了,但是问题就是不知道是在哪一步又重新给cookie赋了值
logout.php
PHP code
<?php
session_start();
setcookie("user",null);
setcookie("PHPSESSID",null);
$_SESSION['user']=null;
unset($_SESSION['user']);
unset($_COOKIE['user']);
session_destroy();
header("Set-Cookie:user=");
header("location:index.php");
?>
都session_destroy()这样以后,session是肯定销毁掉了的,再定向到index.php,那就要看你index.php的验证是否登陆的代码了,是AJAX+cookie验证吗?还是只是验证一下cookie,其实你只要在index.php里面测一下就知道,打印一下session与cookie,看看通过重定向过到index.php后输出的session与cookie是否还存在就知道了,晕咯,真是搞这么麻烦
从logout.php 转到index.php 时,我在login.php里面输出了一下$_COOKIE和$_SESSION,但是不幸的是,这两个变量里面的值全部都在!根本就没有被清除,不知道logout.php里面的操作为什么会没有起作用?