Переменная сеанса перезаписывается php - PullRequest
0 голосов
/ 18 сентября 2011

Я создал страницу входа, которая должна назначать различным группам сеанс ['level'] в зависимости от того, вошли они или нет, используя правильные данные. скажем, администратор входит в систему, он получает сессию ['admin'] session ['member'] и session ['Council'], которые все зависят от его уровня пользователя из базы данных. но когда я проверяю массив сессии, я получаю: идентификатор, имя пользователя, администратор, администратор, администратор вместо идентификатор, имя пользователя, администратор, совет, член. код, который я использую для запроса

//normal user
$queryN= mysql_query("SELECT * From users where username='$username' and hashed_password ='$dash' AND
level='member' LIMIT 1");
//normal council member
 $queryC = mysql_query("SELECT * From users where username='$username' and hashed_password ='$dash' AND
level='council' LIMIT 1");
//normal admin
$queryA = mysql_query("SELECT * From users where username='$username' and hashed_password ='$dash' AND
level='admin' LIMIT 1");
//Check whether the query was successful or not      
//normal user
if(mysql_num_rows($queryN) == 1)
{session_regenerate_id();
$resultN = mysql_fetch_assoc($queryN);  
$_SESSION['user_id'] = $resultN['id'];
$_SESSION['username'] = $resultN['username'];       
$_SESSION['member'] = $resultN['level']; 
session_write_close();
redirect_to("../public/index.php");
}
//admin user
elseif(mysql_num_rows($queryA) == 1){
session_regenerate_id();
$resultA = mysql_fetch_assoc($queryA);   
$_SESSION['user_id'] = $resultA['id'];
$_SESSION['username'] = $resultA['username']; 
$_SESSION['admin'] = $resultA['level']; 
$_SESSION['member'] = $resultA['level'];
$_SESSION['council'] = $resultA['level']; 
session_write_close();
redirect_to("../public/staff.php");
}

//council user
elseif(mysql_num_rows($queryC) == 1){
session_regenerate_id();
$resultC = mysql_fetch_assoc($queryC);  
$_SESSION['user_id'] = $resultC['id'];
$_SESSION['username'] = $resultC['username'];  
$_SESSION['council'] = $resultC['level']; 
$_SESSION['member'] = $resultC['level'];
session_write_close();
redirect_to("../public/index.php");
}else{
//Login failed
redirect_to("../public/login.php");
}

и функции для проверки учетных данных каждого пользователя:

    session_start();
    $_SESSION['ERRMSG_ARR'] = array(); 
    function logged_in() {
        return isset($_SESSION['level']);
    }

    function confirm_logged_in() {
if(!isset ($_SESSION['member']) || (trim($_SESSION['member']) == '')) {
$_SESSION['ERRMSG_ARR'][] = 'You were not Authorised to view that page';
            redirect_to("login.php");
        }
    }
function confirm_login_council() {
if(!isset ($_SESSION['council']) || (trim($_SESSION['council']) == '')) {
        $_SESSION['ERRMSG_ARR'][] = 'Sorry but you were not Authorised to view that page';
        redirect_to("login.php");
        }
    }
function confirm_login_admin(){
if(!isset($_SESSION['admin']) || (trim($_SESSION['admin']) == '')) {
    $_SESSION['ERRMSG_ARR'][] = 'Unfortunately for you; You were not Authorised to view that page';
            redirect_to("login.php");
        }
    }

и для проверки значений массива сессии, которые я использовал:

  foreach($_SESSION as $value){
        echo $value . " | ";
    }

1 Ответ

1 голос
/ 18 сентября 2011

Вы устанавливаете переменные сеанса "admin", "member" и "Council" на одно и то же значение:

$_SESSION['admin'] = $resultA['level']; 
$_SESSION['member'] = $resultA['level'];
$_SESSION['council'] = $resultA['level'];

Попробуйте также распечатать ключом, чтобы получить более четкое представление о происходящем:

foreach($_SESSION as $key => $value){
  echo $key, ':', $value , ' | ';
}
...