Intereting Posts
Поле ввода типа и запрос, переданный PHP с AJAX Ошибка PHP Parse: синтаксическая ошибка, неожиданный T_OBJECT_OPERATOR Форма Symfony 2 с избранным списком Как определить, действительно ли файл загружен и сохранен, несмотря на предварительную выборку / кеш браузера? Ошибка автоматического форматирования Netbeans с отступом параметра метода Изменение размера шрифта текстового изображения, преобразованного из текста в функцию изображения динамически PHP: какова цель session_name Как-то php сломал doctype Список всех возможных ошибок PHP Можно ли полагаться на IP-адрес Paypal исключительно для регистрации покупок? Как настроить автозагрузчик Zend для загрузки настраиваемого пути для ресурсов до пути по умолчанию PHP, если «id» null перейти к URL-адресу извлечение идентификаторов, назначенных списку идентификаторов пользователей Поиск базы данных в PHP Что означает восклицательный знак в PHP?

Удаленное уничтожение сеанса в php (журналы пользователя в другом месте)?

Эй, я пытаюсь заставить свой 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 «кто-то из зарегистрированных в каком-то другом месте».

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