会话未按预期工作PHP

时间:2016-09-23 12:53:12

标签: php session session-state

我在同一台服务器上有多个站点,只有很少的更改。问题是,当用户登录A站点时,如果他进入B站点,则从URL访问,允许他查看内容。如何限制用户查看B网站内容。

下面是我的身份验证码

function validate_login($email , $password){
        global $_config;
        if(empty($email) or empty($password)){
            return false;
        }

        //Now perform validation here
        //$email = mysql_real_escape_string($email);
        //$password = mysql_real_escape_string($password);

        $query_obj = new execute_query();
        $where = 'email="'.$email.'" and password = md5("'.$password.'")';
        $result = $query_obj->select_query(array('*') , 'user' , $where);

        $user = array();

        if($result->num_rows > 0){

            $user = array();
            while($row = $result->fetch_assoc()) {
                $user = $row;
                $user['is_logged'] = true;
            }

            session_start();
            $_SESSION['user'] = $user;
            $url  = $_config['site_url'].'dashboard.php';
            //header('Location :'.$url);die;
            header("Location: ".$url);
        }
        return false;
    }

在每个页面的顶部,我正在检查会话,如。

<?php
session_start();
//echo "<pre>";print_r($_SESSION['user']);die;
if(!isset($_SESSION['user'])){ 
    $url  = $_config['site_url'].'login.php'; 
    //header('Location :'.$url);die;
    header("Location: ".$url);
} ?>

P.S:一种方法是将unique_session_id保存在数据库中,并检查用户是否属于当前数据库。但我想要一些更通用和更好的解决方案。

由于

1 个答案:

答案 0 :(得分:0)

您可以在会话中添加额外级别,以便唯一地存储2个网站

<?php
    session_start();

    if(!isset($_SESSION['siteA']['user'])) { 
        $url  = $_config['site_url'].'login.php'; 
        header("Location: ".$url);
} 
?>

知道您需要做的就是确保siteAsiteB中的代码知道每个网站的密钥值,即siteAsiteB密钥。< / p>

<?php
    session_start();
    $site = getSiteKeyFromConfig();

    if(!isset($_SESSION[$site]['user'])) { 
        $url  = $_config['site_url'].'login.php'; 
        header("Location: ".$url);
} 
?>