3

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

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

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

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

remember(request, principal, *kw)

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

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

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

这甚至是正确的路线吗?

4

1 回答 1

3

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

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

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

这不需要您使用身份验证、记住/忘记或会话工厂以外的任何东西。

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

于 2011-10-05T15:07:25.060 回答