Python 如何使用烧杯将值保存到金字塔中基于cookie的匿名会话

Python 如何使用烧杯将值保存到金字塔中基于cookie的匿名会话,python,session,pylons,pyramid,beaker,Python,Session,Pylons,Pyramid,Beaker,我有一个使用烧杯加密cookie会话的金字塔应用程序。我可以使用RequestWithUserAttribute、pyramid.security.authenticated_userid()、memory()和forget()让用户登录 然而,大多数用户永远不会登录,我想将一个特定的值保存在用户提供给站点的cookie(如果可能的话,请加密)中(他们的位置,或者任何字符串) 我无法发现如何使用memory()函数为一个会话设置多个主体,我宁愿不发送自己的集Cookie头,更不用说自己处理数据加

我有一个使用烧杯加密cookie会话的金字塔应用程序。我可以使用RequestWithUserAttribute、pyramid.security.authenticated_userid()、memory()和forget()让用户登录

然而,大多数用户永远不会登录,我想将一个特定的值保存在用户提供给站点的cookie(如果可能的话,请加密)中(他们的位置,或者任何字符串)

我无法发现如何使用memory()函数为一个会话设置多个主体,我宁愿不发送自己的集Cookie头,更不用说自己处理数据加密了

我发现您可以将关键字参数传递给memory():

但是当我尝试发送任何额外的值时,我不断地遇到错误

理想情况下,我会期望这样的事情:

remember(request, 'public', {'location':request.params.get('location')})

这是正确的路由吗?

金字塔中的会话和身份验证(通常)是不相交的概念。有很多人学习如何存储经过身份验证的用户“在会话中”,但这绝不是一种要求。会话的要点是为访问您站点的访问者跨请求存储任意数据。这可能是他们已登录的事实,也可能是您的随机字符串

关键是您可以在会话中存储随机内容。它可以通过
request.session
直接在请求对象上以金字塔形式提供(在配置程序上设置会话工厂之后)

request.session['mykey']='some random value'
这不需要您使用身份验证、记住/忘记或会话工厂以外的任何其他功能


但请求仅在浏览器打开时持续。我已将配置值设置为
session.auto=True
session.timeout=129600
。cookie绝对被保存,因为用户可以在浏览器会话中保持登录状态,但我似乎无法重新加载任何其他值。您还没有告诉我您使用的身份验证策略。正如我所说,auth!=会议。听起来您正在使用另一个用于存储cookie的身份验证策略,并且您没有按照烧杯文档正确配置会话。已编辑断开的链接,但OP无故恢复了更改。如果它再次被还原,工作链接是:我还原了它,因为我故意对链接进行了版本设置,以使它们反映在它被回答时的答案。然后,用户可以查看自那时起文档是否发生了更改。更新一个随时间变化的链接很容易偏离这个答案。如果您想在检查1.9分支是否仍然有用后更新该分支的链接,则可以,但从永久链接转换为非永久链接是不明智的。如果您仔细查看,原始答案中没有链接版本,它只是被破坏了。非永久性断开的链接没有用处。
remember(request, 'public', {'location':request.params.get('location')})