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

У меня есть веб-сайт с аутентификацией формы:

1) Пользователь входит в систему с выбором, оставить его в системе или нет.

2) Сервер генерирует токен, сохраняет его в базе данных и отправляет файл cookie токена в браузер.

Обратите внимание, что когда пользователь решает не оставаться в системе, когда он закрывает свой браузер, срок действия маркера cookie истечет, а если пользователь решит остаться в системе, срок действия маркера cookie истечет через год после входа в систему.

3) Когда пользователь выходит из системы, сервер деактивирует токен, сохраненный в базе данных, и удаляет файл cookie токена в браузере.

Проблема в том, что если пользователь решит не оставаться в системе, если он закроет свой браузер, срок действия файла cookie токена истечет, но токен, сохраненный в базе данных, не будет деактивирован - сервер не узнает, закроет ли пользователь свой браузер.

Как мне деактивировать неиспользуемый токен в моей базе данных?


person dpp    schedule 26.11.2012    source источник


Ответы (1)


Сохранение всего сеанса на стороне сервера только для того, чтобы запомнить данные для входа в систему, не является обычной практикой. Я рекомендую следовать дизайну facebook/google: если пользователь хочет, чтобы браузер «запомнил его», сгенерируйте некоторый случайный безопасный файл cookie «токен доступа», который сохраняется в пользовательской таблице в качестве последнего действительного токена доступа для этого пользователя. Затем, когда браузер снова обращается к веб-сайту, он отправляет этот файл cookie, и сервер может проверить, соответствует ли он какому-либо из существующих (действительных) токенов доступа, и, таким образом, войти в систему пользователя.

person Sagi Mann    schedule 26.11.2012
comment
Я генерирую идентификатор сеанса (токен), сохраняю его в базе данных и отправляю в браузер как файл cookie. К тому времени, когда пользователь посещает мой веб-сайт, я проверяю его файл cookie сеанса и нахожу совпадение в своей базе данных. Чем мой отличается от Google или Facebook? - person dpp; 26.11.2012
comment
вам также необходимо написать временную метку истечения срока действия в вашей базе данных для токена и проверить ее во время входа в систему. Вам не нужно удалять токены из БД, просто оставьте там последний (по одному на пользователя). Конечно, вам не нужно создавать токены для анонимных сеансов... иначе ваша БД взорвется :) - person Sagi Mann; 28.11.2012