Подтвердить что ты не робот

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

Эй, я пытаюсь заставить мой php-сайт в основном "выйти из системы" (session_destroy()), когда один и тот же пользователь регистрируется в другом месте. Есть ли способ сделать это? Чтобы удаленно уничтожить определенный сеанс?

Спасибо, ребята!

Скотт

4b9b3361

Ответ 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 "кто-то зарегистрировался из какого-то другого".

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