我在应用引擎上使用 webapp2 session 库。在我的应用程序中,cookie 的默认路径是 /
,但我希望一个特殊的 cookie 仅在 /api/.*
上有效。 set_cookie
方法不允许指定新 cookie 的配置,只能指定 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?
谢谢!
最佳答案
您没有使用 cookie,您使用的是 session 数据。那是完全不同的。 Cookie 存储在浏览器中, session 存储在服务器中。因为 session 的想法是它是横向的,所以您必须手动实现您想到的任何特定于路径的逻辑。
如果您想使用具有特定路径的实际 cookie,这很简单而且 documented in the web2py docs :
response.cookies['mycookie'] = 'somevalue'
response.cookies['mycookie']['expires'] = 24 * 3600
response.cookies['mycookie']['path'] = '/'
session 和 cookie 之间有什么区别?cookie 是存储在浏览器上的单个信息 block 。因此,例如,如果您想跟踪购物车内容以及字体大小偏好,您可能会存储多个 cookie,如下所示:
- 购物车:商品 1、商品 2、商品 3
- FONT_SIZE:12pt
- 姓名:弗雷德
这些变量中的每一个都将与 cookie 一起存储在浏览器中。使用 session ,您只在浏览器中存储一条信息,一个 session_id:
- SESSION_ID:56a3y678
然后在服务器端,您将拥有一个可能如下所示的 session 数据库:
| SESSION_ID | KEY | VALUE
---------------------------------------------------
| 56a3y678 | shopping-cart | Item1,Item2,Item3
| 56a3y678 | font-size | 12pt
| 56a3y678 | name | Fred
像服务器端这样存储信息有很多优点。一方面,您可以存储比浏览器允许的更多的信息。此外,由于服务器维护自己的数据库,您可以更安全地信任它;虽然 is_admin_user 的 cookie 不可信任,但 session 变量通常可以。
缺点显然是,您不是依靠浏览器来保持一切更新,而是依靠您的服务器软件。因此,例如,如果您有 10 个 Web 服务器并且用户在它们之间轮换,则他们都必须与同一个 session 数据库对话才能正常工作。
关于python - 更改 webapp2 中的 cookies 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473276/