Система регистрации файлов cookie/сеансов

Когда пользователь входит в систему, я получаю его/ее идентификатор и сохраняю его в сеансе var. Интересно, так ли это? Или я должен использовать файлы cookie? поэтому он автоматически войдет в систему и т.д.

session_start();


ifcorrectlogin {
$_SESSION['id'] = mysql_result($loginQuery, 0, 'user_id');
}

как вы аутентифицируете своих пользователей?

//Новичок

Ответ 1

Да, это путь. Сам сеанс уже поддерживается куки файлом, чтобы удалить вас при любых усилиях по программированию. Сеанс (фактически, файл cookie) будет работать до тех пор, пока пользователь не откроет экземпляр браузера или пока сеанс не закончится на стороне сервера, потому что пользователь не посещал сайт в течение определенного времени (обычно около 30 минут).

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

Если вы хотите добавить опцию "Запомнить меня на этом компьютере", вам нужно добавить еще один файл cookie, который живет дольше, чем сеанс. Вам нужно только обеспечить, чтобы вы генерировали длинное, уникальное и труднодоступное значение для файла cookie, иначе его слишком легко взломать. Посмотрите, как это сделал PHP, проверив файл cookie с именем phpsessionid в вашем веб-браузере.

Ответ 2

Файлы cookie можно легко манипулировать. Управление входами/выходами с помощью сеансов. Если вы хотите, вы можете сохранить адрес электронной почты пользователя/имя пользователя в файле cookie и заполнить поле имени пользователя для них при следующем посещении после истечения текущего сеанса.

Ответ 3

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

То, как они это делали в django, заключалось в том, что он помещал криптографический хеш в файлы cookie пользователя, который обновлялся каждый просмотр страницы и сохранял всю информацию о сеансе в базе данных вашего сервера, чтобы предотвратить проблемы с вмешательством пользователя и проблемами безопасности.

Ответ 4

Как BalusC упоминает, что session_ -функции в php - это путь, ваша основная идея звучит. Но есть еще много разных реализаций, некоторые из них имеют свои подводные камни. Например, как объясняет Джонатан Самсон, использование файлов cookie может привести к нарушениям безопасности.

Мой PHP немного ржавый, но я помню, что функции session_ могут также использовать идентификаторы сеансов, закодированные в URL-адресах. (Также была возможность добавить это автоматически во все локальные ссылки (как GET) и сформировать целевые объекты (как POST). Но это тоже было без риска.) Один из способов предотвратить захват сеанса путем копирования SID - запомнить IP-адрес и сравнить его для любого запроса, который поставляется с действительным идентификатором сеанса для IP-адреса, который отправил этот запрос.

Как вы можете видеть, базовый метод - это только начало, есть еще много вещей, которые нужно учитывать. Поэтому рекомендуется рекомендовать SapphireSun: используя хорошо протестированную библиотеку, вы можете получить хороший уровень безопасности, не используя ценное время разработки для разработки собственных сеансовой системы. Я бы рекомендовал этот подход для любой системы, которую вы хотите развернуть в реальном мире.

OTOH, если вы хотите узнать о сеансах PHP и проблемах с безопасностью, вы должны обязательно сделать это сами, хотя бы для того, чтобы понять, как этого не делать; -)