2016-09-23 108 views
0

我在同一臺服務器上有多個網站,發生小的變化。問題是,當用戶登錄到一個網站,如果他進入B站點,從url,他是允許查看內容。如何限制用戶查看B站點內容。會話無法按預期工作PHP

下面,如果我的authenication代碼

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保存在數據庫中,並檢查用戶是否屬於當前數據庫或沒有。但我想要一些更通用和更好的解決方案。

感謝

+0

嘗試在單獨的網站添加$ _SESSION [「site1_session」],$ _SESSION [「site2_session」],檢查是否會話2可當他觀看第二個站點。 – rahul

+0

是的,這也是一個選項。但我想知道一些更好的方法。 – user1885057

+0

,因爲它們在同一臺服務器下,會話將存在於其下的任何站點中。現在它已經達到了你的邏輯,即當他們進入其他網站時是否再次要求登錄認證。 – rahul

回答

0

您可以添加一個額外的水平,你的會話存儲2位唯一

<?php 
    session_start(); 

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

知道所有你需要做的就是確保代碼siteAsiteB知道什麼鍵值是針對每個站點的,即siteAsiteB鍵。

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

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