Когда пользователь входит в систему, я получаю идентификатор him/her и сохраняю его в var сессии. То, что интересно, действительно ли это - способ пойти? Или я должен использовать cookie? таким образом, это автоматически входит в систему и так далее.
session_start();
ifcorrectlogin {
$_SESSION['id'] = mysql_result($loginQuery, 0, 'user_id');
}
как Вы аутентифицируете своих пользователей?
//Новичок
Как упоминает BalusC, session_
-функции в php - это путь, ваша основная идея звучит. Но все еще есть много различных реализаций, некоторые из них имеют свои подводные камни.
Например, как объясняет Джонатан Самсон, использование cookies может привести к дырам в безопасности.
Мой PHP немного заржавел, но я помню, что -функции session_
- могут также использовать сессионные идентификаторы, которые закодированы в URL. (Также была возможность автоматического добавления этого идентификатора ко всем локальным ссылкам (как GET) и формирования целей (как POST). Но и это было не без риска.)(Один из способов предотвратить перехват сеанса, скопировав SID, - это запомнить IP-адрес и сравнить его для любого запроса, который приходит с действительным идентификатором сеанса, с IP-адресом, который отправил этот запрос.
Как вы можете видеть, основной метод - это только начало, есть много других вещей, которые следует учитывать. Поэтому рекомендация SapphireSun - это то, что нужно учитывать: Используя хорошо протестированную библиотеку, вы можете получить хороший уровень безопасности, не затрачивая ценного времени на разработку собственной сессионной системы. Я бы рекомендовал этот подход для любой системы, которую вы хотите установить в реальном мире.
OTOH, если вы хотите узнать о сессиях PHP и вопросах безопасности, вы определенно должны сделать это самостоятельно, если только для того, чтобы понять, как не сделать это ;-)
.Да, это путь. Сама сессия уже поддерживается куки-файлом, чтобы убрать все усилия по программированию. Сессия (на самом деле, cookie) продлится до тех пор, пока у пользователя будет открыт экземпляр браузера, или до тех пор, пока сессия не завершится на стороне сервера, потому что пользователь не заходил на сайт в течение определенного времени (обычно около 30 минут).
При входе в систему просто поместите полученный User
в $_SESSION
. При каждом запросе на страницах с ограниченным доступом просто проверяйте, доступен ли зарегистрированный пользователь User
в $_SESSION
, и обрабатывайте запрос соответствующим образом, т.е. продолжайте его или перенаправляйте на страницу входа в систему или ошибку. При выходе из системы просто удалите User
из $_SESSION
.
Если вы хотите добавить опцию Remember me on this computer, то вам необходимо самостоятельно добавить еще один куки-файл, который продлится дольше, чем сеанс. Вам нужно только убедиться, что Вы генерируете длинное, уникальное и трудно угадываемое значение куки, в противном случае его слишком легко взломать. Посмотрите, как PHP сделал это, проверив куки с именем phpsessionid
в вашем веб-браузере.
С куки-файлами очень легко манипулировать. Управляйте входом/выходом из системы с помощью сеансов. При желании вы можете сохранить адрес электронной почты/имя пользователя в куки-файле, а также заполнить поле с именем пользователя при следующем посещении после истечения срока действия сеанса
.Я бы попытался найти сессионный движок, чтобы вам не пришлось иметь дело с проблемами безопасности, которые кусают вас за задницу, если вы сделаете хоть малейшую вещь неправильно. Я использую джанго, в котором встроен сессионный движок. Я не знаю о других предложениях в этой области, хотя я бы предположил, что большинство фреймворков будут иметь такой.
Способ, которым они делали это в django, заключался в помещении криптографического хэша в куки пользователя, который получает обновление каждого просмотра страницы, и сохранении всей остальной информации о сеансе в базе данных на вашем сервере, чтобы предотвратить вмешательство пользователя и проблемы с безопасностью.
.