Простой способ для администратора уничтожить сеанс вошедшего в систему пользователя - PullRequest
0 голосов
/ 31 июля 2009

Мне нужно иметь возможность удалить сеанс пользователя (заставить его войти снова).

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

Как мне найти и удалить сеанс текущего пользователя?

Сеансы хранятся в файловой системе, и я бы хотел сохранить их в таком виде.

Ответы [ 6 ]

1 голос
/ 31 июля 2009

Как насчет переменной внутри вашей сессии, которая проверяется на каждой странице? Вы не указали ни одного языка, но на некоторых из них вы могли бы сделать что-то вроде:


Session["username"] = <userid>;

Итак, на всех страницах (или на вашей главной странице) вы можете иметь что-то вроде


if(Session["username"] == null)
   redirect('Login');

Тогда, когда вы решите, что пользователь больше не входит в ваш круг доверия, вы можете получить что-то вроде:


Session["username"] = null;

Это приведет к тому, что пользователь будет перенаправлен на страницу входа, и, поскольку вы уже изменили свою БД, он / она больше не сможет войти в систему. Обратите внимание, что вы не уничтожили сам сеанс, а только ту часть, которая поддерживала вход пользователя в систему.

0 голосов
/ 31 июля 2009

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

забанить пользователя; сохранить статус пользователя, который проверяется при входе в систему

0 голосов
/ 31 июля 2009

У вас есть возможность установить другое программное обеспечение на сервере? Вы можете настроить memcached?

Если это так, вы можете просто сохранить список заблокированных пользователей (из таблицы БД) в memcached. Когда администратор блокирует пользователя, он обновляет таблицу БД и список в кэше. Оттуда, веб-приложение должно только проверять кеш при каждом запросе страницы, что позволяет избежать попадания в базу данных.

0 голосов
/ 31 июля 2009

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

0 голосов
/ 31 июля 2009

Я не уверен, что понимаю ваш вопрос. Вы хотите заблокировать пользователя в середине сеанса после того, как он вошел в систему? Если это так, вы должны не только удалять из БД, но также удалять информацию о сеансе из памяти и заставлять пользователя снова входить в систему. Как отметил Дэвид, вам может потребоваться сохранить список заблокированных пользователей в БД, если вы хотите делать это все время. Тем не менее, я не уверен, почему кто-то так поступил, так как гораздо проще не позволить пользователям войти в систему.

0 голосов
/ 31 июля 2009

Это зависит от вашей системы управления сессиями. Разные управляют сессиями по-разному.

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

Затем проверьте это при доступе к странице и сгенерируйте Запрещенную ошибку, если она установлена.

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

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