Cookie/Сессии входят в систему система

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

session_start();


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

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

//Новичок

10
задан Erkka 25 December 2009 в 23:55
поделиться

4 ответа

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

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

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

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

.
0
ответ дан 4 December 2019 в 02:50
поделиться

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

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

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

.
5
ответ дан 4 December 2019 в 02:50
поделиться

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

.
1
ответ дан 4 December 2019 в 02:50
поделиться

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

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

.
1
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: