@ber_enot
Веб-разработчик, Vue.js / Node.js

Как грамотно и безопасно использовать сессии в связке с cookies?

Уважаемые гуру, снова вынужден просить у вас помощи!

Пытаюсь реализовать механизм аутентификации-авторизации, начитался статей про сессии и куки, но так и не смог упорядочить всю эту информацию у себя в голове.
  • Передавать идентификатор сессии в URL - стоит ли это делать, если у пользователя отключены куки? Ведь, на мой взгляд, это крайне небезопасно. Но если запретить такую передачу, что делать с пользователями, у которых отключены куки?
  • Какую информацию хранить в куках, а какую в сессиях? Первое, что приходит в голову - в куках хранить id сессии, а в сессии все остальное: ид пользователя, ip, user-agent. Но чую, что это не правильно.

Направьте, пожалуйста, на верный путь.
  • Вопрос задан
  • 1452 просмотра
Решения вопроса 4
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
что делать с пользователями, у которых отключены куки?

Ну значит пользователь знает, что делает и не будет удивляться тому, что не может залогиниться.
Ответ написан
ppokrovsky
@ppokrovsky
Не нужно распыляться на полутора человек пользователей с дисковыми телефонами или текстовыми браузерами. В одной крупной интернет-компании действует общее правило, что браузеры с < 1% суточной аудитории не поддерживаются. В абсолютных числах это тысячи посетителей в сутки - от них сознательно отказываются чтобы сфокусироваться на массовой аудитории. ID сессий в коде или урле это очень-очень плохо, так как кроме явно костыльного решения, это чревато попаданием сессий например в поисковый индекс со всеми вытекающими
Ответ написан
Комментировать
@heartdevil
плыву как воздушный шарик
Привет.

Думаю, вы слишком заморачиваетесь. Обычно используют просто сессии (они тоже куки используют) и все.
Если нужно что-то хранить на клиенте, то используют куки. Задайте себе вопрос, вам что-то нужно хранить на клиенте? Если нет, то просто используйте сессии.

А по поводу отключенных куки и других вещей. Сейчас это уже стало исключением. Обращайте на это внимание, если задача или клиент того требует. В остальных случаях считайте, что и куки и, к примеру, js включены.
Ответ написан
kimono
@kimono
Web developer
Я на клиенте храню ID сессии. При запуске любого скрипта по этому ID в базе сессий ищется информация и сверяется с user-agent-ом пользователя (можно и ip сверять дополнительно, но если ip поменялся, значит и сессия будет считаться закрытой, а это не всегда удобно).
Дальше определяется под какой учетной записью залогинился пользователь этой сессии (дополнительный столбец в базе сессий). Сессионные данные парсятся из базы, а инфа о пользователе берется из мемкеша.
На клиенте можно хранить список избранных материалов например, или данные от голосовалок, чтобы лишний раз не бегать на сервер за этой информацией (на сервере тоже нужно проверять, естественно).
При завершении скрипта все собранные сессионные данные вновь добавляются в базу.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Arik
При запросах проверяем id сессии в куках, если нет, то шлем какую метку в куки, делаем переадресацию на себя + другая метка в гет, если есть метка гет и нет метки куков, то значит надо все передавать через гет и пост. Так я давно хотел делать для телефонов, но на практике у некоторых телефонах как раз таки глюки при работе, 10-15 запросов норм, а потом нет кук. Друг все перенес в гет и норм все заработало, исключение лишь в том что в ГЕТ теперь опасные данные.
На деле же все такие старые телефоны используют оперумини у которой нет таких проблем. Можно совсем забыть про id-сессии в гет, но при этом советовать оперумини если юзер зашел с какой очень старой модели
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы