点击注销链接还是直接到login.php没有进入login.php?action=logout<?php 
header("Content-type: text/html; charset=GB2312");
if (!isset ($_POST['submit']))
{
exit('非法访问');
}$username =htmlspecialchars($_POST['username']);
$password =$_POST['password'];include 'conn.php';
$result = mysql_query("SELECT * FROM Persons WHERE UserName='$username'and PassWord ='$password'");if($row = mysql_fetch_array($result)){
    //登录成功
    $_SESSION['username'] = $username;
    $_SESSION['userid'] = $row['uid'];
  echo $username,' 欢迎你!进入 <a href="my.php">用户中心</a><br />';
    echo '点击此处 <a href="login.php?action=logout">注销</a> 登录!<br />';
    exit;
  }
 else {
    exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试');
}
session_start();//注销登录
if($_GET['action'] == "logout"){
    unset($_SESSION['userid']);
    unset($_SESSION['username']);
    echo '注销登录成功!点击此处 <a href="login.html">登录</a>';
    exit;
}?>

解决方案 »

  1.   

    逻辑问题
    if($row = mysql_fetch_array($result)){
        //登录成功
        $_SESSION['username'] = $username;
        $_SESSION['userid'] = $row['uid'];
      echo $username,' 欢迎你!进入 <a href="my.php">用户中心</a><br />';
        echo '点击此处 <a href="login.php?action=logout">注销</a> 登录!<br />';
        exit;
      }
     else {
        exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试');
    }在这不管有没有带 $_GET['action'] 都要先执行上面的代码块,而你的判断不论走那条路都要exit,当然不会执行注销了,所以把注销的代码放到前面去,登陆处理放到最后
      

  2.   

    又看到个毛病 session_start()之前不能有任何形式输出啊,所以建议你总是把session_start()放到程序开始那