如何使用Beaker将值保存到Pyramid中基于匿名cookie的会话

时间:2011-10-05 01:18:44

标签: python session pylons pyramid beaker

我有一个使用Beaker加密cookie会话的Pyramid应用程序。我可以使用RequestWithUserAttribute,pyramid.security.authenticated_userid(),remember()和forget()来记录用户。

但是,大多数用户永远不会登录,并且有一个特定值我想保存在用户提供的cookie中(如果可能的话加密)(他们的位置或任何字符串)就此而言)。

我无法发现如何使用remember()函数为会话设置多个主体,我不想发送自己的Set-Cookie标头,更不用说自己处理数据加密了。 / p>

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

remember(request, principal, *kw)

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

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

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

这甚至是正确的路线吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

这不要求您使用身份验证,记住/遗忘或会话工厂以外的任何其他内容。

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