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

3 投票
1 回答
1521 浏览
提问于 2025-04-17 03:41

我有一个使用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

撰写回答