表达的不太清楚,意思就是一个网站有个栏目里面有很多个会员,但是每个会员只能通过浏览自己的信息,不能查看其他会员的信息。
这是我现在的代码。先是登陆时的验证<?php 
session_start();
include_once("./include/path.php");    //自定义的路径;
    include_once("$include/name.php");    //自定义的各种命名;
    include_once("$include/public.inc.php");

$name=$_POST['name'];
$passowrd=$_POST['psw'];
if ($name && $passowrd){
$sql = "select * from admin where name = '$name' and psw='$passowrd' limit 1";
$query = mysql_query($sql);
$result = mysql_fetch_array($query);
if($result['id']){
$_SESSION['id'] = $result['id'];
$_SESSION['name'] = $result['name'];
header("Location: admin.php?id=$result[id]");
exit;
}else{
echo "<script language=javascript>alert('用户名密码错误');window.location.href='index.php';</script>";
}
}else {
echo "<script language=javascript>alert('用户名密码不能为空');window.location.href='index.php';</script>";
}
?>然后进入到会员页面admin.php之后还有一个验证,相当于checkuser<?
session_start();

$sql1 = "select name from admin where id = $_GET[id]";
$query1 = mysql_query($sql1);
$row1 = mysql_fetch_array($query1);

if($_SESSION['id']==$row1['id'] or $_SESSION['name']=''){
        echo "<script language=javascript>alert('对不起,未登录只有浏览权限');window.location.href='index.php';</script>";    
}
?>
但是这样的话我用我的会员账号进来之后仍就可以通过修改url中的id值来浏览其他会员的信息。
现在我相当于陷入了一个死循环,只要我手动修改了url中的id值,那么我就相当于修改了$_GET[id]的值,那么接下来的验证也就没有意义了。求解怎么做这个会员?
貌似我最上面的会员登录就有问题,是不是这样admin.php?id=$result[id]来进行会员的登录取值非常不合适?

解决方案 »

  1.   

    不用给我源码,我只想知道现在思路上应该怎么,我觉得按照我现在的get取值进会员本身就是个死循环,怎么都能取到值
      

  2.   

    这是我写的一个权限分类的类,对你会很有帮助,你可以参考
    <?PHP
    //管理員權限控制類
    Class Power{
    Public $Popedom = Array(0=>"進入后臺界面",
    1=>"系統基本設定",
    2=>"管理旅館類型",
    3=>"管理房間類型",
    4=>"管理房間設施",
    5=>"管理旅館設施",
    6=>"管理城市信息",
    7=>"管理系統附件",
    8=>"旅館信息管理",
    9=>"房型信息管理"
    ); Function __construct(){
    IF(!IsSet($_SESSION["UserId"]) Or !IsSet($_SESSION["GroupId"]) Or !IsSet($_SESSION["UserName"]) Or !IsSet($_SESSION["IsLock"])){
    Alert("","".YJ_SysRoot."@manage/index.php?work=getout");Die();
    }Else{
    //判断用户是否为超级管理员
    IF($_SESSION["GroupId"]==1){
    $_SESSION["Isadmin"]=True;
    }Else{
    $_SESSION["Isadmin"]=False;
    }
    }
    } //常规项目权限判断
    //用法:IF(!$Power->_Item(6,3)){Alert("因为您的权限不足所以您暂时无法对{$Power->Popedom[6]}进行操作!");}
    //参数:$Type为$Popedom的索引;$P是權限的層次取值范围:0初级;1中级;2高级;3全能
    Function _Item($Type,$P=0){
    IF($_SESSION["IsLock"]==1){Return False;}
    IF($_SESSION["Isadmin"]){Return True;}
    IF(!Is_numeric($Type) Or !Is_numeric($P)){Return False;} //检测指定的项目键名是否在用户的管理项目列表内
    IF(Empty($_SESSION["PList"])){Alert("","index.php?work=getout");}
    IF(Array_key_exists($Type,$_SESSION["PList"])){
    IF($_SESSION["PList"][$Type]>=$P){
    Return True;
    }Else{
    Return False;
    }
    }Else{
    Return False;
    }
    } //目录访问权限判断
    //用法:IF(!$Power->_cDir("../@Img")){Alert("因为您的权限不足所以您暂时无法对该目录进行操作!");}
    //参数:$oPath为需要判断的文件夹路径;
    Function _cDir($oPath){
    IF($_SESSION["IsLock"]==1){Return False;}
    IF(Empty($oPath)){Return False;}
    IF($_SESSION["Isadmin"]){Return True;}
    IF(!$_SESSION["Isadmin"] And Empty($_SESSION["UserDir"])){Return False;}
    $oPath=Str_iReplace("\\","/",$oPath);
    $oPath=Str_iReplace("//","/",$oPath); //检测指定的classid是否在用户的许可管理的分类列表内
    IF(Stristr($oPath,$_SESSION["UserDir"])!==False){
    Return True;
    }Else{
    Return False;
    }
    } //析构函数
    Function __destruct(){
    }// //方法,获取属性
    // Function __get($property_name){
    // IF(isset($this->$property_name)){
    // Return ($this->$property_name);
    // }Else{
    // Return (NULL);
    // }
    // }
    //
    // //方法,设置属性
    // Function __set($property_name,$value){
    // $this->property_name=$value;
    // }
    }
    ?>另外这个类我用到了我开发的一个cms上,你可以通过研究这个cms的后台权限分配,理解我的思路
    下载地址是
    http://download.csdn.net/source/3248406
      

  3.   

    既然你已经把用户的id写入session了,那就简单了
    只需要判断  $_SESSION['id']是否和get过来的id相同就行了,如果不同就die掉,相同则说明就是用户本人了.
      

  4.   

    根据你的 session id 结合数据库进行权限判断 如果不具备权限那么就exit.如果具备权限那么就判断什么权限做什么输出.
      

  5.   

    已经解决了,不用get的id了,直接用session的id取值、<?
    session_start();

    $sql1 = "select name from admin where id = $_SESSION[id]";
    $query1 = mysql_query($sql1);
    $row1 = mysql_fetch_array($query1);

    if($_SESSION['id']!='$_GET[id]'){
            echo "<script language=javascript>alert('请先登录自己的账户');window.location.href='index.php';</script>";    
    }
    ?>这个是我思路,但是执行不出来,明明session和get的id值一样,但是它总是输出js。相反,如果我把!=改成==就可以了,我诧异了,到达哪里错了,为什么我的思路和执行的结果正好相反了?
    这是执行成功的代码<?
    session_start();

    $sql1 = "select name from admin where id = $_SESSION[id]";
    $query1 = mysql_query($sql1);
    $row1 = mysql_fetch_array($query1);

    if($_SESSION['id']=='$_GET[id]'){
            echo "<script language=javascript>alert('请先登录自己的会员账号');window.location.href='index.php';</script>";    
    }
    ?>
      

  6.   

    $row1 应该反映的是权限,但从你的代码中并没有反映出这点
      

  7.   

    我笑了,竟然是语法错误?
    把if($_SESSION['id']!='$_GET[id]')改成 if($_SESSION['id']!=$_GET[id])
    就可以了,我加个引号就错了?
      

  8.   

    你应该这样修改效率才高
    if($_SESSION['id']==$_GET['id']){