Эй, я пытаюсь заставить свой php-сайт в основном «выйти из системы» (session_destroy ()), когда один и тот же пользователь регистрируется в другом месте. Есть ли способ сделать это? Чтобы удаленно уничтожить определенный сеанс?
Спасибо, ребята!
Скотт
Это, безусловно, возможно, используя 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 принадлежит тому же пользователю, который сейчас регистрируется. Если вы используете сеансы базы данных, это должно быть достаточно простым.
Нет необходимости создавать собственные обработчики сеансов.
Просто храните идентификатор сеанса с именем пользователя в базе данных при входе в систему.
Каждый раз, когда пользователь извлекает страницу, сравните идентификатор сеанса пользователя с сохраненным идентификатором сеанса.
Если идентификаторы сеанса не совпадают, это означает, что пользователь зарегистрировался в другом месте, и вы должны самоуничтожить.
Я могу представить, что вы можете сделать это, используя собственную обработку сеанса. Если вы храните сеансы в базе данных, вы можете удалить их из другого приложения, если вам нужно. Вы бы идентифицировали пользователя по имени пользователя или тому подобное.
Лучший способ – создать свои собственные обработчики сеансов, если у вас есть полный контроль над тем, как хранятся / получаются и контролируются сеансы, не так сложно заставить выйти из системы, и он предлагает вам целый ряд полезных функций. Если у вас есть время.
Но для более быстрого решения: сохраните идентификатор сеанса из PHP в базе данных с пользователем и проверьте это в своей функции isLoggedIn
– или что бы вы ни использовали. Если он не соответствует, принудительно выйдите из системы.
Еще одна вещь, которую вы могли бы сделать, помимо ответа Джона (что отлично, +1), первоначально проверяет, откуда пришел пользователь (референт) и уничтожает сеанс, если пользователь приходит с другой веб-страницы, чем ваш собственный.
$referer = $_SERVER['HTTP_REFERER']; $referer = parse_url($referer); if($referer['host'] != "yoursite.com" || $referer['host'] != "www.yoursite.com") { session_destroy(); }
источник
Я хотел бы предложить, что мы можем сделать, получить время и добавить некоторое добавочное значение (например, manu1234567) и сохранить в базе данных при входе пользователя в систему. добавьте это и в сессию. теперь на каждой странице сравниваются оба, и если это равно, то продолжайте, иначе перейдите на другую страницу или укажите некоторые сообщения.
теперь другая часть, когда когда-либо другой пользователь будет входить в систему с тем же именем пользователя и паролем, база данных будет обновляться, а для первого лица будет сообщение об ошибке msg «кто-то из зарегистрированных в каком-то другом месте».
Примечание: время всегда будет отличаться. поэтому будет очень меньше шансов, что два значения будут одинаковыми.