如何在Pyramid中使用Beaker保存到匿名cookie会话的值
我有一个使用Beaker加密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')})
这条路对吗?
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