今天用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>
欢迎来到信息网 您好,<span style='color:red; font-weight:bold'>".$username."</span>![<a href='/include/loginout.php'><span style='color:green'>退出登陆</span></a>] 今天是".date('Y年m月d日')." 星期".$weekarray[date('w')]."
<a href='/member/signup/register.php'>鸽友聊天室</a> 丨 <a href='index.php?id=".$sessionid."'>返回首页</a> 丨 <a href='/member/signup/register.php'>网站导航</a> <a href='/member/signup/register.php'></a>
</form>";
if($_SESSION['userflag'] == 0)
echo "<form>
欢迎来到信息网 您好,<span style='color:red; font-weight:bold'>".$username."</span>![<a href='/include/loginout.php'><span style='color:green'>退出登陆</span></a>] 今天是".date('Y年m月d日')." 星期".$weekarray[date('w')]."
<a href='/member/signup/register.php'>鸽友聊天室</a> 丨 <a href='index.php?id=".$sessionid."'>返回首页</a> 丨 <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' />
密码:
<input type='password' name='pwd' id='pwd' />
<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>
<input type='submit' value='登 陆' id='sub' />
<a href='/member/signup/register.php'>新用户注册</a> <a href='/member/signup/register.php'>找回密码</a> 丨 <a href='/member/signup/register.php'>鸽友聊天室</a> 丨 <a href='index.php'>返回首页</a> <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跳转页面后就获取不到呢?
我有一个首页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>
欢迎来到信息网 您好,<span style='color:red; font-weight:bold'>".$username."</span>![<a href='/include/loginout.php'><span style='color:green'>退出登陆</span></a>] 今天是".date('Y年m月d日')." 星期".$weekarray[date('w')]."
<a href='/member/signup/register.php'>鸽友聊天室</a> 丨 <a href='index.php?id=".$sessionid."'>返回首页</a> 丨 <a href='/member/signup/register.php'>网站导航</a> <a href='/member/signup/register.php'></a>
</form>";
if($_SESSION['userflag'] == 0)
echo "<form>
欢迎来到信息网 您好,<span style='color:red; font-weight:bold'>".$username."</span>![<a href='/include/loginout.php'><span style='color:green'>退出登陆</span></a>] 今天是".date('Y年m月d日')." 星期".$weekarray[date('w')]."
<a href='/member/signup/register.php'>鸽友聊天室</a> 丨 <a href='index.php?id=".$sessionid."'>返回首页</a> 丨 <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' />
密码:
<input type='password' name='pwd' id='pwd' />
<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>
<input type='submit' value='登 陆' id='sub' />
<a href='/member/signup/register.php'>新用户注册</a> <a href='/member/signup/register.php'>找回密码</a> 丨 <a href='/member/signup/register.php'>鸽友聊天室</a> 丨 <a href='index.php'>返回首页</a> <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跳转页面后就获取不到呢?
解决方案 »
- 求大神给我看看这个正则,在工具中测试匹配出了结果,但是却打印不出来!在线急等
- 相对地址和绝对地址的正则问题
- 求:如何实现将图像保存在txt中,再从txt中将图像取出来?????
- PHP项目的配置问题
- php mysql 在服务器端运行不正常,在本地却运行正常,很着急,望高手指点
- PHP+ADODB+Smarty做的一个小网站,大家帮慢看看速度怎样,如果大家觉得好,可以开放源代码
- 网页数据抓取过程中为何有一个页面一打开就是空的.而在浏览器中查看这个页面中的各个子页面数据的时候都存在.
- 用phplib模版做的search页面,不能传值,帮忙看一下!
- 在PHP中如何传递变量给SQL语句 (急)
- 有没有在php利用类的好例子呀!
- 关于imagestring()再问一次。。。。
- 正则表达式简单问题求指导
你试着将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();
@session_start(); //启动session
=========================================================
应该改:
@session_start(); //启动session
session_id($_GET['id']);//设置当前session为cookie中对应的session解说:
你还没有session_start()呢,又怎么可能办到“设置当前session为cookie中对应的session”呢???