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

我有一个使用Beaker Encrypted cookie会话的Pyramid应用程序.我可以使用RequestWithUserAttribute,pyramid.security.authenticated_userid(),记住()和忘记()来登录用户.

但是,大多数用户永远都不会登录,因此我想将一个特定的值保存在用户指定的站点(其位置或与此相关的任何字符串)的cookie中(如果可能的话,将其加密). ).

我没有发现如何使用Remember()函数为会话设置更多的主体,并且我不希望不发送自己的Set-Cookie标头,更不用说自己处理数据加密了.

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

remember(request, principal, *kw)

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

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

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

这甚至是正确的路线吗?

最佳答案
金字塔(通常)中的会话和身份验证是不相干的概念.很多人都在学习“在会话中”存储经过身份验证的用户的方法,但这绝不是必需的.会话的重点是为跨请求的网站访问者存储任意数据.这可能是因为它们已登录,也可能是您的随机字符串.

关键是您可以在会话中存储随机内容.它可以在金字塔中(在配置器上设置session_factory之后)直接通过request.session在请求对象上使用.

request.session['mykey'] = 'some random value'

这不需要您使用身份验证,记住/忘记或使用会话工厂以外的任何方式.

https://docs.pylonsproject.org/projects/pyramid/en/1.2-branch/narr/sessions.html

转载注明原文:我如何使用Beaker将值保存到金字塔中基于匿名cookie的会话中 - 代码日志