python - 更改 webapp2 中的 cookies 路径

标签 python google-app-engine session-cookies webapp2

我在应用引擎上使用 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/

相关文章:

python - 在列表中查找表达式的答案

python - Pandas:读取文件时跳过包含特定字符串的行

java - Appengine 上 google Go 与 Python 和 Java 的资源使用情况

javascript - 谷歌应用引擎,Ajax,文件上传,

java - 如何将我的代码部署到代理后面的 App Engine

Python - 通过 urllib2 session 登录时发布 Facebook 状态

python - 如何使用 python subprocess.call,将 stdout 的副本发送到日志文件,同时检测第一个命令的结果

javascript - 获取 express 编码的 cookie 作为 header 值

tomcat - Tomcat 可以为不同的路径给我不同的 cookie 吗?

python - Mypy 提示默认参数值与省略号不兼容