Флажок-логин, по иронии судьбы, использует файлы cookie session
с помощью системы безопасности Werkzeug.
Так, теоретически, можно было бы использовать для добавления дополнительных пользовательских данных.
Но давайте поместим session
в контексте: его основная цель - просто отслеживать идентификацию пользователя. Как таковая, она должна быть простой ссылкой, а процедуры «Флакс-Вход» делают остальные, сохраняя все остальное в g
.
Фактически, g
является очень гибким способом, которым session
никогда не может быть. Например, можно добавить к нему элементы. Не только g.User
, но приложите g.company
или g.current_pet
экземпляров класса к нему. Я подозреваю, что добавление метода g.current_pet.rendered_picture_url()
к session
будет несколько сложным. :)
Использование g
во многих отношениях также намного безопаснее. A session
браузер cookie, мог бы, теоретически, использоваться другими актерами (например, вирусом), поскольку он хранится на компьютере пользователя. Или какой-либо другой кросс-сайтjavascriptобезьяна-бизнес. Объект g
хранится в ОЗУ сервера, а не в браузере.
ОДНАКО, только что сказал все это. Бывают случаи, когда использование файлов cookie имеет больше смысла. Например, если части вашего веб-сайта не находятся в Flask, но бок о бок с другой структурой. Или если вы застряли, используя какой-то негибкий код, который требует увидеть значение в качестве файла cookie.
Этот ответ не имеет смысла. 'session' - это интерфейс dict к файлу cookie (по умолчанию), постоянный по всем запросам. 'g' - пространство имен Python во время одного запроса. Эти два не эквивалентны, и нет понятия «безопасность» с 'g', это внутренний объект. Сеанс - это интерфейс, он не должен быть файлом cookie, но этот файл cookie подписан и привязан к домену, который его выпустил. Этот ответ содержит кучу запутанной дезинформации о логине, куки-файлах и безопасности. – davidism
Почему иронично, что Flask-Login использует сеанс?Зачем говорить о потенциальных атаках javascript в вопросе о том, почему объект загружается в 'g' из' session'? – davidism
Извините, что вы нашли мой формулировочный комплекс. Да, когда я говорю «cookie браузера сеанса», я имею в виду «сеанс (который использует) cookie браузера». Я ничего не знаю о сеансовом интерфейсе. Не могли бы вы предоставить ссылку? – JohnAD