Правильно ли восстанавливать сеанс с файлами cookie? - PullRequest
2 голосов
/ 15 января 2012

Поправьте меня, если я не прав, пожалуйста:

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

Учитывая это, как разрешить пользователюзакрыть его / ее компьютер, вернуться через несколько дней и открыть сайт, и при этом войти в систему с помощью файлов cookie и, тем не менее, каким-либо образом быть в безопасности?

Как кому-то нравится, например, amazon, сделать это?

РЕДАКТИРОВАТЬ:

Чтобы быть более понятным, вот пример:

if (!isset($_SESSION['id'])) 
{   
    $_SESSION['id'] = $_COOKIE['id'];
    $_SESSION['email'] = $_COOKIE['email'];
}

это явно плохо, что лучше?

Ответы [ 4 ]

2 голосов
/ 15 января 2012

Прежде всего, «сессия» - это скорее концепция, а не конкретная реализация.

Для PHP я считаю способ хранения данных сеанса в файловой системе по умолчанию, связанный с идентификатором сеанса, который обычно хранится в файле cookie (хотя его также можно отправить с помощью параметра строки запроса: http://stackoverflow.com/a/455099/23822).

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

Что касается вашего вопроса в комментарии о том, «что мешает кому-то захватить cookie-файл»данные и фальсификация имени входа с помощью токена? »Теоретически это может произойти, но идентификатор сеанса, хранящийся в файле cookie, должен быть случайным, поэтому весьма маловероятно, что он будет угадан (злоумышленнику будет гораздо проще угадать пароль пользователяНа самом деле то же самое уже возможно с любым видомSion.

1 голос
/ 15 января 2012

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

Amazon управляет безопасностью, имея три уровня «входа в систему».

Уровень 1. Базовая функциональность просто работает.

Уровень 2. Вы должны повторно ввести свой пароль, чтобы получить доступ к некоторым вещам (например, истории заказов)

Уровень 3. Вы должны повторно ввести платежинформация для доступа к некоторым вещам (например, добавление нового адреса доставки)

0 голосов
/ 15 января 2012

Для файлов cookie я использую метод, описанный здесь: http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/ и здесь: http://jaspan.com/improved_persistent_login_cookie_best_practice

0 голосов
/ 15 января 2012

Вы храните токен безопасности на основе сеанса внутри данных cookie пользователя и сохраняете тот же токен в таблице базы данных пользователя. При создании сеанса вы проверяете, может ли эта пара имя пользователя / токен войти на ваш сайт в соответствии с ранее сохраненными данными, а затем сделать недействительным токен.

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