Система регистрации файлов cookie / сессий - PullRequest
10 голосов
/ 26 декабря 2009

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

session_start();


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

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

// Новичок

Ответы [ 4 ]

5 голосов
/ 26 декабря 2009

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

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

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

1 голос
/ 26 декабря 2009

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

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

1 голос
/ 26 декабря 2009

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

0 голосов
/ 26 декабря 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...