一段校验权限的代码的,一种是在登录时一次性读取所有的权限,并存到SESSION中,需要校验时,再进行比对,另一种是在需要校验时再查询数据库进行比对,应该使用那一种方式呢?
方式一代码:
$sql="select * from admin_empower where u_id=$uid";
$result=$db->query($sql);
$row=$result->fetch_assoc();
$_SESSION['empower']=$row;
在需要进行校验时,调用校验函数:
function ReadEmpower($power){
return $_SESSION['empower']['em_news'];  //值只有1或0
}方式二不需要事先读权限表,只需要在进行校验时,调用校验函数来查表:
function ReadEmpower($power){
$sql="select $power from admin_empower where u_id=$uid";
$result=$db->query($sql);
$row=$result->fetch_assoc();
return $row[power];
}假定有十个管理功能,就有十种权限,这样一来,使用那种方式好呢?

解决方案 »

  1.   

    function ReadEmpower($power){ $temp=$_SESSION[$power];
    if(!$temp)
    {
    $sql="select $power from admin_empower where u_id=$uid"; 
    $result=$db->query($sql); 
    $row=$result->fetch_assoc(); 
    $temp=$row[$power]
    }return $temp
      

  2.   

    但SESSION存储的过多会不会影响服务器的效率?而且是把一个数组存在SESSION中。
      

  3.   

    session和數據庫一塊用比較好,session驗證用戶,數據庫存儲權限!
      

  4.   

    还是session存入库中为好,操作方便,对网站以后的扩展也有利。session入库速度也很快。现在有很多人认为凡是数据入库的相关操作,这样就会影响程序的运行速度。这是个误区呀。
      

  5.   

    session和數據庫一塊用比較好,session驗證用戶,數據庫存儲權限! 
    我一般也是这样做的。这样做安全/准确/方便
      

  6.   

    我觉得校验用户权限的代码可以用单独一个程序来实现,或者说在用户登录的时候就一次性将权限查出来,和用户名一起保存进session
      

  7.   

    convert PHP Array to a String , or JSON string, then put it into Session
      

  8.   

    也就是先将数组转换成字符串格式(比如JSON格式),再保存在Session里,以后再反序列化成数组,可能资源开销会好点
      

  9.   

    经过下面的代码验证,使用SESSION比数据库要快700-800倍
    <?php
    class runtime

        var $StartTime = 0; 
        var $StopTime = 0; 
     
        function get_microtime() 
        { 
            list($usec, $sec) = explode(' ', microtime()); 
            return ((float)$usec + (float)$sec); 
        } 
     
        function start() 
        { 
            $this->StartTime = $this->get_microtime(); 
        } 
     
        function stop() 
        { 
            $this->StopTime = $this->get_microtime(); 
        } 
     
        function spent() 
        { 
            return round(($this->StopTime - $this->StartTime) * 1000, 1); 
        } 
     
    }//例子 
    include("conn.php");
    $sql="select * from admin_empower";
    $results=$db->query($sql);
    $row=$results->fetch_assoc();
    $runtime= new runtime;
    $runtime->start();
     
    //你的代码开始 
    for($i=0; $i<10000; $i++)
    {
        $_SESSION['x']=$row;
    //$db->query($sql);
    }
     
    //你的代码结束
     
    $runtime->stop();
    echo "页面执行时间: ".$runtime->spent()." 毫秒";
    echo $_SESSION['x']['u_id'];
    ?>