2016-07-27 5 views
0

У меня сеанс, как этот $_SESSION['login'] и когда оно равно с 1, это означает, что использование вошло в мой сайт:Как отключить сеанс конкретного пользователя?

if ($_SESSION['login'] == 1) { 
    // You are logged 
} else { 
    // login/register 
} 

Также у меня есть еще один сеанс, который содержит идентификатор пользователя. Что-то вроде этого:

echo $_SESSION["Id"]; 
/* It is containing the user's id (an integer number). 
    Something like: 234124 
*/ 

Теперь я хочу, чтобы сбросить $_SESSION['login'] для пользователя, который имеет определенный идентификатор. Например, я хочу unset($_SESSION['login']) для $_SESSION["Id"] = 234124. Как я могу это сделать?


Edit: Все, что я пытаюсь сделать: Когда пользователь изменяет свой пароль, я удалить все его печенье из cookies таблицы подписать его от всех других своих устройств. Также я хочу удалить его сеанс.

ответ

3

Если я понял ваше право, вы хотите полностью вывести пользователя, то есть со всех сеансов (с ноутбука, мобильного телефона и т. Д.).

Это возможно, только если 1) у вас есть сопоставление user_id => session_id и 2) вы можете как-то запросить сеансы. Например, когда вы храните сеансы в таблице базы данных, и у вас есть user_id в качестве столбца в этой таблице, вы можете просто удалить все сеансы для пользователя (или просто изменить их).

Но это невозможно с обработчиком сеансов PHP по умолчанию. У вас нет такого типа отображения.

Советую вам написать a custom session handler, в котором хранятся сеансы в таблице базы данных. Чтобы построить сопоставление, вы можете переопределить write method и извлечь свой user_id. Будьте осторожны с сериализованными данными, обратите внимание на session.serialize_handler configuration directive.

Например,

php.ini

session.serialize_handler = php_serialize 

обработчик сеанса

public function write($id, $data) 
{ 
    $content = unserialize($data); 

    return $this->db->insert('sessions', [ 
     'id' => $id, 
     'user_id' => $content['user_id'], 
     'data' => $data, 
    ]); 
} 

и код управления

if (...) { 
    $db->execute('DELETE FROM sessions WHERE user_id = ?', $userId); 
} 
+0

спасибо .. upvote – stack

Смежные вопросы