2016-07-27 6 views
1

У меня сеанс, как этот $_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 таблицы подписать его от всех других своих устройств. Также я хочу удалить его сеанс.

+0

session_start(); session_destroy(); весь сеанс, который вы создали ранее, будет уничтожен. –

+2

Мой вопрос спрашивает: как я могу это сделать для конкретного пользователя? – stack

+0

oh right @stack I непонятый вопрос. –

ответ

4

Обновлено Ответ

Вы ввели полезную информацию в комментариях:

Когда пользователь изменяет свой пароль, мне нужно выйти из системы его счет от всех других его устройств.

Ваш вопрос заключается в том, как реализовать единый логин/выход из системы на всех устройствах, если вы используете сеансы.

Вот простой подход:

  1. Пользователь входит в систему, вы установите userID и lastSeen в сессии. lastSeen имеет временную метку. Не сохраняйте информацию в сеансе, которую пользователь может изменить.
  2. пользователь входит в другое устройство, вы установите userID и lastSeen в этой сессии
  3. Сессии через устройство всегда синхронизирована (за lastSeen исключением), потому что они только держать не-изменение данных (идентификатор пользователя, имя пользователя)
  4. В вашем DB, имеет logout таблицу со столбцами userIDrequestTime
  5. Если пользователь выходит из системы, изменяет свой пароль, или делает что-нибудь еще, что должно требовать повторного входа, вызовите session_destroy() и добавить запись в таблице logout
  6. Когда пользователь TRIE s для доступа к запретной страницу, проверьте:
    • $_SESSION['userID'] существует ли (значит пользователь вошел в какой-то момент)
    • ли lastSeen в течение последних 30 минут (в противном случае, вызовите session_destroy() и запросить другой логин)
    • ли есть запрос на выход с идентификатором пользователя в logout и с requestTime > lastSeen (с тех пор как мы в последний раз видели пользователя, она попросила выйти из другого устройства). Если это так, session_destroy() и требуется другой логин.

Оригинал ответ

Сессия обрабатывается в изоляции. Когда приходит запрос, данные $_SESSION для этого пользователя загружаются в память. Поэтому, если userID 5 делает запрос, у вас нет доступа к данным сеанса для пользователя 7 (без некоторых хаков).

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

session_destroy(); //clears everything for the current user 
unset($_SESSION['login']);// clears just this variable for the current user 

Если из сеанса просмотра одного пользователя, вы хотите возиться с другим пользователем: Я не вижу прецедента. Похоже, что это будет иметь негативные последствия для безопасности, и это заставляет меня подвергать сомнению вашу большую архитектуру. Это поражает всю цель сеансов: предоставить каждому пользователю изолированный, постоянный хранилище на сервере.

В любом случае, чтобы изменить данные сеанса случайного пользователя из другой активности пользователя (опять же, зачем?), Используйте базу данных для сохранения и получения значений. Стол может быть как простой, как:

userID | sessionData | sessionExpires 

Вы можете хранить данные сессии в формате JSON с json_encode и получить его с json_decode для любого конкретного пользователя, из любого сеанса просмотра.

+0

Спасибо, upvote .. btw ваша деятельность странная на SO .. У вас было менее 2 тыс. Репутации всего несколько недель назад, я имею в виду, что ты недавно заслужил большую репутацию. Зачем? Вы были наняты в SO ';-)'? Какая у вас новая мотивация для активного участия здесь? – stack

+1

@stack Я не был нанят. Вы наняты? Моя мотивация - это обучение. Я обнаружил, что необходимость быстро решать проблемы и объяснять решения явно заставляет меня многому научиться и практиковать эффективное кодирование. – BeetleJuice

2

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

<?php 
//start session 
session_start(); 
// remove all session variables 
session_unset(); 
// destroy the session 
session_destroy(); 
?> 
+0

Но OP хочет настроить таргетинг на конкретный сеанс пользователя по идентификатору пользователя. Не только текущий пользователь – BeetleJuice

+0

, а затем просто добавьте условие if, которое указывает переменную сеанса. –

+0

Я даже не понимаю, почему сеанс создан так? –

2
if ($_SESSION['login'] == 1) { 
if ($_SESSION["Id"] == 234124) { 
     session_destroy(); 
     session_unset(); 
} 
} else { 
    // login/register 
} 
+0

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

1

использование session_destroy();

Он уничтожает все данные, связанные с текущей сессией. Таким образом, удаленные данные пользователя (который нажал на выход или в вашем случае, который изменил пароль) будут удалены.

Check this узнать больше.

+0

Но OP хочет настроить таргетинг на конкретный сеанс пользователя по идентификатору пользователя. Не только текущий пользователь – BeetleJuice

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