今天用session结合cookie的方法进行登录验证,结果出现了一些意想不到的问题,到现在我都没明白为什么会出现这种情况,下边我给您把这个我个人认为很离奇的事件给各位大虾复述一遍,希望有高手能指点迷津。
我有一个首页index.php,源码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--<meta http-equiv="X-UA-Compatible" content="IE=7" />-->
<title>网站首页</title>
<link type="text/css" href="css/cssreset.css" rel="stylesheet" />
</head><body>
<?php
include("data/conn.php"); //导入数据库连接文件
require_once("top.php");//导入首页顶部top.html文件
require_once("main.php");//导入首页主体页面main.php文件
require_once("btn.html");//导入页脚
?>
</body>
</html>
我在首页导入了以上这些文件,然后我把验证文件放在了top.php里,名为yz.php,下面是yz.php的代码<?php
ob_start();
//获取cookie中sessionID
//$sessionid=$_GET['id'];
setcookie("sessionid",$_GET['id']);
//echo $_GET['id'];
$sessionid = $_COOKIE["sessionid"];
//echo $sessionid;
session_id($_GET['id']);//设置当前session为cookie中对应的session
@session_start(); //启动session
//echo session_id();
include("data/conn.php");
//获取Session
$username = $_SESSION['username'];  //获取session中的用户名
//执行SQL语句获得userflag的值
$sql="select intMemberID,userFlag from t_user "."where strUserName = '$username'";
//echo $sql;
$query = mysql_query($sql)or die("SQL语句执行失败");
$row = mysql_fetch_array($query);
$memberID=$row['intMemberID'];
//判断当前数据库中的权限信息与Session中的信息比较,如果不同则更新Session的信息
if($row['userFlag'] != @$_SESSION['userflag'])
{
$_SESSION['userFlag'] = $row['userflag'];
}
//根据Session的值输出不同的欢迎信息
if(@$_SESSION['userflag'] == 1){
$weekarray=array("日","一","二","三","四","五","六"); 
echo "<form>
     欢迎来到信息网&nbsp;&nbsp;您好,<span style='color:red; font-weight:bold'>".$username."</span>![<a href='/include/loginout.php'><span style='color:green'>退出登陆</span></a>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天是".date('Y年m月d日')."&nbsp;&nbsp;星期".$weekarray[date('w')]."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      &nbsp;&nbsp;&nbsp;&nbsp;<a href='/member/signup/register.php'>鸽友聊天室</a>&nbsp;丨&nbsp;<a href='index.php?id=".$sessionid."'>返回首页</a>&nbsp;&nbsp;丨&nbsp;&nbsp;<a href='/member/signup/register.php'>网站导航</a> <a href='/member/signup/register.php'></a>
    </form>";
if($_SESSION['userflag'] == 0)
echo "<form>
     欢迎来到信息网&nbsp;&nbsp;您好,<span style='color:red; font-weight:bold'>".$username."</span>![<a href='/include/loginout.php'><span style='color:green'>退出登陆</span></a>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天是".date('Y年m月d日')."&nbsp;&nbsp;星期".$weekarray[date('w')]."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      &nbsp;&nbsp;&nbsp;&nbsp;<a href='/member/signup/register.php'>鸽友聊天室</a>&nbsp;丨&nbsp;<a href='index.php?id=".$sessionid."'>返回首页</a>&nbsp;&nbsp;丨&nbsp;&nbsp;<a href='/member/signup/register.php'>网站导航</a> <a href='/member/signup/register.php'></a>
    </form>";
}
else
{
setcookie("sessionid");
  echo  "<form action='/include/login_memo.php' method='POST'>
      用户名:
      <input type='text' name='uname' id='uname' />
      &nbsp;&nbsp;密码:
      <input type='password' name='pwd' id='pwd' />
      &nbsp;&nbsp;
      <select id='quxiang' style='background:none;_margin-top:3px'>
        <option selected='selected'>选择去向</option>
        <option><a href='#'><span>会员专区</span></a></option>
        <option>我的鸽舍</option>
        <option>赛鸽商城</option>
        <option>拍卖专区</option>
        <option>在线直播</option>
        <option>鸽友知道</option>
        <option>赛鸽百科</option>
      </select>
      &nbsp;&nbsp;
      <input type='submit' value='登&nbsp;陆'  id='sub' />
      &nbsp;&nbsp;<a href='/member/signup/register.php'>新用户注册</a> &nbsp;&nbsp;<a href='/member/signup/register.php'>找回密码</a>&nbsp;丨&nbsp;<a href='/member/signup/register.php'>鸽友聊天室</a>&nbsp;丨&nbsp;<a href='index.php'>返回首页</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href='/member/signup/register.php'>网站导航</a> <a href='/member/signup/register.php'></a>
    </form>
";
}
?>如果验证没通过,就显示登录表单,反正显示登录成功的提示。如果没有登录,然后输入账号密码,点击登陆,页面跳转到login_memo.php页面,下边是这个文件的源码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>登陆提示</title>
</head><body>
<?php
session_start(); //启动session
//echo session_id();
include("../data/conn.php");
//获取用户输入
$username = $_POST['uname'];
$passcode = $_POST['pwd'];
$cookie   = "0";
//执行SQL语句
$query = @mysql_query("select strUserName, userFlag from t_user "
."where strUserName = '$username' and strPassword = '$passcode'")or die("SQL语句执行失败");
//判断用户是否存在,密码是否正确
if($row = mysql_fetch_array($query)){
   if($row['userflag'] == 1 or $row['userflag'] == 0){    //判断用户权限信息是否有效
       //如果用户权限有效,设置session
      $_SESSION['username'] = $row['strUserName'];
      $_SESSION['userflag'] = $row['userFlag'];
      switch($cookie){         //根据用户的选择设置cookie保存时间
        case 0:         //保存Cookie为浏览器进程
          setcookie("sessionid", session_id());
          break;
        case 1:         //保存1天
          setcookie("sessionid", session_id(), time()+24*60*60);
          break;
        case 2:         //保存30天
          setcookie("sessionid", session_id(), time()+30*24*60*60);
          break;
        case 3:         //保存365天
          setcookie("sessionid", session_id(), time()+365*24*60*60);
          break;
      }
  //echo "<a href=\"main.php\">dddd</a>";
        header("location: ../index.php?id=".$_COOKIE['sessionid']);      //自动跳转到main.php
  }else{ 
        echo "<script type=\"text/javascript\">alert('用户权限信息不正确');window.location.href='login.php'</script>";
       } 
}else{
    echo "<script type=\"text/javascript\">alert('用户名或密码错误!');window.location.href='login.php'</script>";
}
?>
</body>
</html>如果登陆成功,把sessionid放入cookie中,在session中存放用户信息,接着跳转回首页,然后yz.php再次验证,这时问题就出现了,本来我设置好了cookie,但是跳转回首页,yz.php中的$_COOKIE["sessionid"];却获取不到我在login_memo.php页面设置的cookie中的id值,于是万般无奈下,我在login_memo.php中跳转页面的url上加入了id值,这样再回去,就不需要从cookie获取了,但是当我直接获取url中的id,然后通过id获取session中存放的用户信息的时候,居然$_COOKIE["sessionid"];又可以获取到我设置的那个cookie了  ,最让我不解的就是,为什么我设置的cookie跳转页面后就获取不到呢?

解决方案 »

  1.   

    先启动SESSION_START();
    你试着将SESSION_START();放第一行
    <?php
    @session_start(); //启动session
    ob_start();
    //获取cookie中sessionID
    //$sessionid=$_GET['id'];
    setcookie("sessionid",$_GET['id']);
    //echo $_GET['id'];
    $sessionid = $_COOKIE["sessionid"];
    //echo $sessionid;
    session_id($_GET['id']);//设置当前session为cookie中对应的session//echo session_id();
      

  2.   

    session_id($_GET['id']);//设置当前session为cookie中对应的session
    @session_start(); //启动session
    =========================================================
    应该改:
    @session_start(); //启动session
    session_id($_GET['id']);//设置当前session为cookie中对应的session解说:
    你还没有session_start()呢,又怎么可能办到“设置当前session为cookie中对应的session”呢???