2015-11-07 4 views
1

У меня есть одна серьезная проблема.unset как-то разрушает все совершенно разные сессии

Существует небольшая система PHP, содержащая панель администратора и панель клиентов. Эти панели должны функционировать независимо друг от друга.

Например - если администратор выходит из системы, клиент должен остаться внутри, и т.д.

Существует мой logout.php скрипт (который вызывается кнопка выхода яваскрипта обработчиком):

<?php 
require_once("./setup/additional_functions.php"); 
require_once("./setup/mysql_settings.php"); 
session_start(); 

$functionName = filter_input(INPUT_GET, "functionName"); 

if($functionName == "logoutAdmin") { 
    initiateLogout("um_status", "users_managers", "um_id", $_SESSION['admin_id'], "admin"); 
} else if($functionName == "logoutCustomer") { 
    initiateLogout("customer_visit", "users_customers", "customer_id", $_SESSION['cust_id'], "../customer"); 
} else { 
    echo "Unknown error!"; 
} 
function initiateLogout($loginTime, $tableName, $id, $sessionName, $backPage) { 
    $sqli = new sqlSettings(); 
    $sql = "SELECT ". $loginTime ." FROM ". $tableName ." WHERE ". $id ." = ". $sessionName; 
    $result = $sqli->setConnection()->query($sql); 
    $user = $result->fetch_array(); 
    $timestamp = $user[$loginTime] - 300; 

    $sql = "UPDATE " .$tableName. " SET " .$loginTime ." = ". $timestamp. " WHERE " .$id ." = ". $sessionName; 
    $result = $sqli->setConnection()->query($sql); 

    $_SESSION = array(); 

    if (isset($_COOKIE[session_name()])) { 
     setcookie(session_name(), '', time() - 50000, '/'); 
    } 

    unset($sessionName); 
    //redirect_to($backPage); 
    echo "../" . $backPage; 
} 
?

>

данных внутри $ _SESSION [ 'admin_id'] и $ _SESSION [ 'customer_id'] - абсолютно разные! Но так или иначе - когда я нажимаю кнопку (например) на стороне администратора - клиент также выходит из системы !!! Это не должно быть так.

Как этого избежать? Будем очень благодарны за любую помощь!

+1

Вы выписываете их оба с помощью $ _SESSION = array(); – MiDri

+0

Я прокомментировал строку с $ _SESSION = array(); , Он ничего не влияет. То же самое повторяется. – tenzor

+0

Ну, может кто-нибудь мне помочь? Мне все еще нужна помощь! – tenzor

ответ

1

Вам не нужно устанавливать $ _SESSION в пустой массив.

Нужно установить соответствующий ключ $ _SESSION для нулевой или вставки.

Для клиентов это будет unset($_SESSION['cust_id']) и для администратора это будет unset($_SESSION['admin_id'])

Вашего текущий код уничтожает всю сессию, которая регистрирует как клиент и администратор счета вне.

0

Ну, я думаю, что моя ошибка заключалась в тестировании всей системы на моем локальном компьютере. Причина, если вы делаете то же самое - создается сеанс в одном браузере и на одном ПК. И неважно , с которым вы вошли в систему. После того, как я разместил свою систему на удаленном сервере и протестировал мой старый код из разных «баллов» - все работает отлично.