Изменить путь куки в webapp2 - PullRequest
1 голос
/ 28 февраля 2012

Я использую lib сессий webapp2 на appengine. В моем приложении путь по умолчанию для файлов cookie - /, но я хочу, чтобы специальный файл cookie действовал только на /api/.*. Метод set_cookie не позволяет указать конфигурацию для нового куки, только имя и бэкэнд куки. Я также не нашел способа изменить путь после создания файла cookie.

from webapp2_extras import sessions


sessions_store = sessions.get_store(request=self.request)
special_cookie = sessions_store.get_session(name='special_cookie', backend='securecookie')

... # change ``special_cookie`` path ? how?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

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

Если вы хотите использовать реальный файл cookie с определенным путем, этопросто и задокументировано в документах web2py :

response.cookies['mycookie'] = 'somevalue'
response.cookies['mycookie']['expires'] = 24 * 3600
response.cookies['mycookie']['path'] = '/'

В чем разница между сеансом и файлом cookie? Файл cookie представляет собой один фрагмент информации хранится в браузере .Например, если вы хотите отслеживать содержимое корзины покупок, а также настройки размера шрифта, вы можете сохранить несколько файлов cookie, например:

  • SHOPPING_CART: Item1, Item2, Item3
  • FONT_SIZE: 12pt
  • ИМЯ: Фред

Каждая из этих переменных будет храниться в браузере с файлами cookie.В сеансе вы сохраняете только один фрагмент информации в браузере: session_id:

  • SESSION_ID: 56a3y678

Затем на стороне сервера у вас будет база данных сеансов, которая может выглядеть следующим образом:

| SESSION_ID | KEY           | VALUE
---------------------------------------------------
| 56a3y678   | shopping-cart | Item1,Item2,Item3
| 56a3y678   | font-size     | 12pt
| 56a3y678   | name          | Fred

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

Недостатком, очевидно, является то, что вместо того, чтобы полагаться на браузер для обновления всего, вы полагаетесь на программное обеспечение вашего сервера.Так, например, если у вас есть 10 веб-серверов и пользователи переключаются между ними, они все должны общаться с одной и той же базой данных сеансов, чтобы работать правильно.

1 голос
/ 28 февраля 2012

По умолчанию Класс SessionStore создается с использованием параметров конфигурации по умолчанию , где path для cookie_args установлено на '/'.

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

...