уничтожить сеанс после того, как пользователь удален, но все еще вошел в систему

В login.php я проверяю, все ли в порядке, и если я создаю сеанс и перенаправляю пользователя

 $success = $dbh->prepare("SELECT UserId FROM users WHERE username =:username 
AND password=:password");
    $success->bindParam(':username', $username);
    $success->bindParam(':password', $password);
    $success->execute();
    $rowSuccess = $success->fetch();
    $user_id = $rowSuccess['userid'];

    $_SESSION['user_id'] = $user_id;
    $_SESSION['loggedIn'] = 1; 

Итак, как уничтожить сеанс пользователя, когда я удаляю его, если он все еще вошел в систему


person Ben    schedule 04.03.2012    source источник


Ответы (3)


Как только вы вызовете session_destroy(), ваши $_SESSION['user_id'] и $_SESSION['loggedIn'] перестанут существовать. Поэтому, когда пользователь обновляет страницу, используйте условие if для проверки идентификатора пользователя и вызова

 if(!isset($_SESSION['userId'])) { //if the session variable for this doesn't userId exist

   print "Sorry, no recognized account";   
 } 

ИЗМЕНИТЬ:

Это больше похоже на решение AJAX, поскольку вы хотите выполнить какое-то действие сразу после удаления пользователя. В вашем JavaScript настройте запрос ajax, который вызывает PHP-скрипт, выполняющий это действие удаления. Затем, когда действие завершено, предупредите пользователя и переместите его/ее на другую страницу, используя window.location. Обобщить

  $.ajax({
 url:"deleteUser.php",
 cache:false,
 success:function(data){
       alert("Sorry you have been deleted. Re-routing to home page");
               window.location="homepage.php";
       }       
});
person jmishra    schedule 04.03.2012
comment
Я думаю, Мариан спрашивал, что делать, когда пользователь вошел в систему, и он удалил этого пользователя из базы данных;) - person Slawek; 05.03.2012
comment
Тогда это скорее асинхронный процесс. Имейте запрос AJAX, который проверяет удаленное действие и предупреждает пользователя о том, что он / она был только что удален. - person jmishra; 05.03.2012
comment
Ajax не будет работать, потому что, если я перенаправлю его с помощью window.location на домашнюю страницу, сеанс все равно не будет удален. В login.php я проверяю, завершился ли сеанс, потому что я не хочу, чтобы уже вошедший в систему пользователь снова входил в систему. - person Ben; 05.03.2012
comment
Я понимаю. Тогда оставьте запрос AJAX, но session_destroy() все равно должен вам помочь - person jmishra; 05.03.2012
comment
Я не понимаю .. я имею в виду, скажем, я пользователь с id = 55, и я удаляю пользователей с id = 76,95,443 ... и если я использую session_destroy(), он уничтожит мою сессию, а не там, верно? - person Ben; 05.03.2012
comment
нет, session_destroy() уничтожает все данные, связанные с текущим сеансом пользователя на другом компьютере. Это не убьет твоего ни при каких обстоятельствах. - person jmishra; 05.03.2012

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

person Slawek    schedule 04.03.2012

Похоже, session_destroy() — это то, что вам нужно.

Обратите внимание на это из документов session_destroy():

Чтобы завершить сеанс полностью, например, чтобы выйти из системы, идентификатор сеанса также должен быть отключен. Если файл cookie используется для распространения идентификатора сеанса (поведение по умолчанию), то файл cookie сеанса необходимо удалить. Для этого можно использовать setcookie().

person Trott    schedule 04.03.2012