Как прекратить сеанс пользователя в PHP? - PullRequest
3 голосов
/ 18 июня 2011

Я отслеживал онлайн-сеанс пользователя с помощью тега img с кодом ниже.

<img src="http://www.somedomain.com/track/login.php" alt="" title="" width="1" height="1" />

Используя приведенный выше код, я создал раздел администрирования для отображения онлайн-пользователей.

Теперь по какой-то причине.Я должен завершить сеанс пользователя онлайн из раздела администрирования.

Может ли кто-нибудь помочь мне в этом.

Примечание:

на страницах пользователей, сеанс пользователя обрабатываетсяс

if(authenticated) {
 $_SESSION['username']=name;
 $_SESSION['id']=id;
}

Ответы [ 6 ]

2 голосов
/ 18 июня 2011

Я думаю, что если вы можете получить идентификатор сессии PHP пользователя, вы можете сделать:

session_id("<that session id>");
session_start();
session_destroy();

Обратите внимание, что это также означает, что администратор потеряет свою сессию. session_id() здесь описано .

1 голос
/ 18 июня 2011

Если вы хотите завершить сеанс пользователя, вы можете сделать это логически или технически.

Логически вы можете подделать данные сеанса пользователя и установить для флага удаления значение true.Логика вашего приложения должна затем проверить, установлен ли этот удаленный флаг, и, если да, завершить сеанс для этого пользователя.

Технически вы можете завершить любой сеанс, удалив его хранилище сеансов.Это немного зависит от того, какое хранилище вы настроили, но в основном это означает получение имени файла сеанса и удаление его с диска.

Я думаю, что второй вариант проще.Просто получите идентификатор сеанса пользователя и сопоставьте его с именем файла.См. здесь для пути , и здесь для пути и имени .

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

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

1 голос
/ 18 июня 2011

используйте функции ниже:

session_unset();
session_destroy();
0 голосов
/ 18 июня 2011

Я не думаю, что есть простой ответ на то, что вы пытаетесь сделать.

Как сказал Тудор, вы можете удалять файлы сеансов, хранящиеся в определенном каталоге (каталог, который вы можете динамически устанавливать, как он делает в своем примере) - см. Его пример.

Другой способgo это написать свои собственные классы обработки сессий (примеры см. в руководстве по PHP - http://php.net/manual/en/session.customhandler.php) и хранить данные сессий в файлах и / или базе данных. Другими словами, используя ваши собственные обработчики сессий, я думаю, что ваша задача будет проще.

0 голосов
/ 18 июня 2011

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

0 голосов
/ 18 июня 2011

Я бы реализовал это следующим образом: используйте файлы для хранения сеансов, храните эти файлы в определенном месте, где у вас есть права на чтение / запись, присваивайте им предсказуемое имя (например, md5 для имени пользователя) - и когда Вы хотите завершить сеанс для пользователя, просто удалите файл, принадлежащий этому пользователю.

//get current logged in user user - this way we get it as a GET or POST parameter - NOT safe, because the user can modify this parameter - you could get it from the login form for example
$current_user = md5($_REQUEST["user"]); 
// start user's sessions like this
ini_set('session.save_handler', 'files');
//load the session of the current user 
$current_user = md5($_REQUEST["user"]);
//set the current session id to the one corresponding to current user
session_id($current_user);
session_save_path("/tmp/sessions/");
session_start();

В вашей административной части получите имя пользователя в качестве параметра, вычислите на нем md5, затем удалите сеанс этого пользователя:

$current_user = md5($_REQUEST["user"]);
unlink("/tmp/sessions/$current_user");

Этот код может не работать из коробки для вас, но это хороший способ следовать

...