Как приложения php идентифицируют пользователя после истечения времени ожидания сеанса? - PullRequest
2 голосов
/ 30 марта 2010

Я пытаюсь понять, как приложения PHP проверяют, вошел ли пользователь в систему. Я специально просматриваю код mediawiki, чтобы попытаться помочь мне понять, но эти случаи должны быть довольно распространены во всех приложениях php.

Из того, что я понял, основные случаи:

  1. Пользователь только что вошел в систему или был создан, каждый раз, когда они посещают страницу, PHP узнает о них, проверяя данные, общие для переменной $ _SESSION и файла cookie.

  2. У пользователя давно была отмечена опция «запомнить меня» на странице входа. У них на компьютере есть файл cookie с идентификатором токена, который проверяется токеном на сервере для их аутентификации. В этом случае переменная сеанса отсутствует, поскольку время между обращениями может быть неделями.

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

Тем не менее, mediawiki делает именно это. Я проверил, что файлы сеанса удаляются через X минут, но когда я нажимаю «Обновить» в MediaWiki, он знает, какой я пользователь, и переменная «token» не включена в файл cookie.

Ответы [ 3 ]

4 голосов
/ 30 марта 2010

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

И повторное создание сеанса означает повторную регистрацию пользователя.

Это означает, что файл cookie должен содержать достаточно данных для идентификации пользователя.


Конечно, вы не можете сохранить логин + пароль в куки , по крайней мере, в виде простого текста, так как куки проходят через сеть с каждым HTTP-запросом; было бы не совсем безопасно.

Но вы должны найти способ хранить ... достаточно данных; например, логин и, возможно, какой-то хеш, который можно использовать, чтобы определить, действительно ли пользователь говорит, кто действительно, логин в куки.

Вот пара вопросов + ответов, которые могут быть интересны , об этом:

1 голос
/ 30 марта 2010

Ответ - куки. Когда сеансы истекают, сервер не может идентифицировать пользователей, кроме того, что отправлено браузером. Так что происходит, когда приложение использует данные cookie для прозрачного перестроения сессии. Если срок действия файла cookie истек или он был удален, то перенаправление на страницу входа в систему является единственным вариантом.

0 голосов
/ 30 марта 2010

Гу вопрос. Ну, в основном функциональность «запомнить меня» реализуется с помощью куки-файла, хранящего «токен», который проверяет пользователя.

Если это не сделано, и на сервер не отправляются файлы cookie, единственный возможный способ состоит в том, что сервер «угадывает», что это вы, основываясь на последовательности параметров. Эти параметры могут включать в себя: IP, строку User-agent и т. Д. ... Но это может работать во многих случаях, но это не считается лучшей практикой, поскольку представляет угрозу безопасности. Ex. многие пользователи совместно используют сеть, прокси-серверы и т. д., и в худшем случае это может сделать вход пользователя в учетную запись другого пользователя.

...