Удаленное уничтожение сеанса в php (журналы пользователя в другом месте)?
Эй, я пытаюсь заставить мой php-сайт в основном "выйти из системы" (session_destroy()), когда один и тот же пользователь регистрируется в другом месте. Есть ли способ сделать это? Чтобы удаленно уничтожить определенный сеанс?
Спасибо, ребята!
Скотт
Ответы
Ответ 1
Конечно, возможно, используя session_id
. Когда пользователь регистрируется в другом месте, вы можете сделать этот шаг перед началом нового сеанса для нового входа:
// The hard part: find out what $old_session_id is
session_id($old_session_id);
session_start();
session_destroy();
// Now proceed to create a new session for the new login
Это уничтожит старый сеанс на стороне сервера, поэтому, когда другой компьютер снова обратится к вашему приложению, он попытается получить доступ к несуществующему сеансу, и для него будет создан новый (в котором пользователь не регистрируется больше).
Трудная часть - это выяснить, что такое идентификатор "старой" сессии. Там нет универсального способа сделать это; вам нужно иметь какой-то механизм, чтобы можно было сказать, что сеанс с идентификатором XXX принадлежит тому же пользователю, который сейчас регистрируется. Если вы используете сеансы базы данных, это должно быть достаточно простым.
Ответ 2
Не нужно создавать собственные обработчики сеансов.
Просто зарегистрируйте идентификатор сеанса с именем пользователя в базе данных при входе в систему.
Каждый раз, когда пользователь извлекает страницу, сравните идентификатор сеанса пользователя с сохраненным идентификатором сеанса.
Если идентификаторы сеанса не совпадают, это означает, что пользователь зарегистрировался где-то в другом месте, и вы должны самоуничтожить.
Ответ 3
Я могу представить, что вы могли бы сделать это, используя собственную обработку сеанса. Если вы храните сеансы в базе данных, вы можете удалить их из другого приложения, если вам нужно. Вы должны идентифицировать пользователя по имени пользователя или что-то в этом роде.
Ответ 4
Лучший способ - создать собственные обработчики сеансов, если у вас есть полный контроль над тем, как сеансы хранятся/извлекаются и контролируются, что не так сложно заставить выйти из системы, и предлагает вам целый ряд полезных функций. Если у вас есть время.
Но для более быстрого решения: храните идентификатор сеанса из PHP в базе данных с пользователем и проверяйте это в своей функции isLoggedIn
- или что-то, что вы используете. Если он не совпадает, принудительно завершите выход.
Ответ 5
Еще одна вещь, которую вы могли бы сделать, кроме ответа Джона (что отлично, +1), первоначально проверяет, откуда пришел пользователь (референт) и уничтожает сеанс, если пользователь приходит с другой веб-страницы, чем ваш собственный.
$referer = $_SERVER['HTTP_REFERER'];
$referer = parse_url($referer);
if($referer['host'] != "yoursite.com" || $referer['host'] != "www.yoursite.com") {
session_destroy();
}
источник
Ответ 6
Я хотел бы предложить, что мы можем сделать, получить время и добавить некоторое добавочное значение (например, manu1234567) и сохранить в базе данных при входе пользователя в систему.
добавьте это и в сессию.
теперь на каждой странице сравниваются оба, и если это равно, то продолжайте, иначе перейдите на другую страницу или дайте несколько сообщений.
теперь другая часть
когда когда-либо другой пользователь войдет в систему с одинаковым именем пользователя и паролем, база данных обновится
и для первого человека будет ошибка msg "кто-то зарегистрировался из какого-то другого".
Примечание: время всегда будет отличаться. поэтому будет очень мало шансов, что два значения будут одинаковыми.