2010-09-30 3 views
0

Каков наилучший способ для хранения идентификаторов пользователей или имен пользователей, чтобы им не приходилось каждый раз регистрироваться?PHP и cookies

Я хочу перенаправить пользователя на страницу участников, если сохраненный идентификатор или имя пользователя сравниваются с сохраненным в базе данных.

Безопасен ли это с помощью файлов cookie и как я могу это сделать?

+0

То, что Сессии сделаны для, больше http://www.php.net/manual/en/book.session.php – Hannes

+1

@Hannes нет, сеансы не для этого. –

+0

Не используйте для этого сеансы. –

ответ

2

Не храните их имя пользователя или пароль в файле cookie. Всегда предполагайте, что все в Интернете могут видеть все файлы cookie на компьютере человека. Вместо этого вы должны сохранить session_id и IP-адрес, к которому они обратились, в таблицу MySQL, а затем сохранить session_id в файл cookie. Большинство браузеров очистят переменные сеанса при закрытии окна, но они не будут очищать файлы cookie. Поэтому вы сначала проверяете сеанс (они в настоящее время вошли в систему), и если они не вошли в систему, то вы проверяете файл cookie (были ли ранее зарегистрированы и, что еще важнее, с этого IP-адреса?)

Конечно, если у них есть session_id, но они не имеют надлежащего IP-адреса, заставьте их войти в систему. Они могут просто иметь ISP с динамическими IP-адресами, или они могли бы слушать сетевой трафик, и они пытаются проникнуть в пользователь admin без пароля.

1

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

Да. cookie - единственный возможный способ отметить браузер.
Вы должны сохранить там uniqie и непредсказуемое значение. Создайте некоторый хэш из данных пользователя, сохраните его в базе данных вместе с другими пользовательскими данными и установите в качестве файла cookie

-1

С моими сайтами я использую пользовательский класс сеанса. Это сохраняет sess_id и sess_hash в cookie, который уникален для текущего пользователя. IP-адрес также сохраняется в базе данных и проверяется на текущий IP-адрес, чтобы убедиться, что это тот же компьютер, но это не главный механизм аутентификации. Затем данные сохраняются, сериализуются и base64'd в базе данных. Я бы посоветовал не использовать PHP-сессии, потому что к ним можно получить доступ любым пользователем с идентификатором. Кто-то, размещая ссылку на что-то с PHPSESSID в нем, может, например, позволить им войти в свою учетную запись.

+0

PHP-сессии, чтобы не передавать идентификатор по ссылкам по умолчанию. Ваш совет основан на незнании. Вы должны лучше изучить эту тему. И, по сути, ваш подход более уязвим для фиксации сеанса, поскольку он, похоже, сохраняет тот же ID навсегда –

+0

PHP-сессии иногда передают идентификатор в URL-адресе. Я никогда не понимал, почему это происходит только изредка. Я подозреваю, что это имеет какое-то отношение к поддержке файлов cookie в браузере. –

+0

Идентификатор последовательно уникален для каждого входа и каждого сеанса. Хэш - это UUID. Таким образом, он не уязвим ни к чему, кроме атак с использованием грубой силы и/или бокового канала (например, в UUID не является случайным.) –

0

Самый безопасный способ - потребовать от браузера действительный SSL-сертификат и утвердить сервер сертификатов агентов-пользователей. Тем не менее, в любом браузере я видел, что установка таких сертификатов - достаточно большая боль & барьер для пользователей, что он, вероятно, не подходит для общедоступного веб-сайта. Однако его иногда можно увидеть в интрасетях.