【问题标题】:How do I save values to an anonymous cookie based session in Pyramid using Beaker如何使用 Beaker 将值保存到 Pyramid 中基于匿名 cookie 的会话
【发布时间】:2018-02-28 03:38:46
【问题描述】:

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

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

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

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

remember(request, principal, *kw)

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

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

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

这甚至是正确的路线吗?

【问题讨论】:

    标签: python session pylons pyramid beaker


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 不过,只要浏览器打开,请求就会持续。我设置了session.auto = Truesession.timeout = 129600 的配置值。绝对会保存 cookie,因为用户可以跨浏览器会话保持登录状态,但我似乎无法重新加载任何其他值。
    • 您还没有告诉我您使用的是哪种身份验证策略。正如我所说的 auth != 会话。听起来您正在使用不同的身份验证策略来存储 cookie,并且您没有按照烧杯文档正确配置会话。
    • 已编辑损坏的链接,但 OP 无缘无故地恢复了更改。如果再次还原,工作链接是:docs.pylonsproject.org/projects/pyramid/en/latest/narr/…
    • 我恢复了它,因为我故意对我的链接进行版本控制,以便它们在回答时反映答案。然后,用户可以查看从那时起文档是否已更改。更新到随时间变化的链接很容易偏离对此答案的帮助。如果你想在检查它仍然有用之后更新到 1.9 分支的链接,那么很好,但是从永久链接转换为非永久链接是不明智的。
    • 如果你仔细看,原来的答案在链接中没有版本,它只是被破坏了。非永久断开的链接没有用。
    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2019-02-18
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多