【问题标题】:How to update webapp2_extras session in GAE based application如何在基于 GAE 的应用程序中更新 webapp2_extras 会话
【发布时间】:2019-06-17 00:55:09
【问题描述】:

我有两个问题:

  1. 第一个问题是,在创建会话后(经常)更新会话是一种好习惯吗?如果不是,那么可能会出现哪些问题?

  2. 我正在开发基于 GAE 的应用程序,并使用 GAE 提供的 webapp2_extras 身份验证模型进行身份验证。 我正在尝试更新会话属性的值(在创建之后),但它似乎不起作用。

确切的代码片段是:

updates = {'fullname': 'sdsdsdsdsd'}
self.auth.set_session_data(session, **updates)

但是,它会抛出一个错误:

TypeError: set_cookie() got an unexpected keyword argument 'fullname'

根据 lib 的文档,它应该可以工作。正如,它写道:

def set_session_data(self, data, **session_args):
    """Sets the session data as a list.

    :param data:
        Deserialized session data.
    :param session_args:
        Extra arguments for the session.
    """
    data = self.store.serialize_session(data)
    if data is not None:
        self.session['_user'] = data
        self.session.container.session_args.update(session_args)

有人可以帮我吗?另外,解释我是否应该更新会话?我有一个场景,我会这样做,但似乎不太好。我认为会话一旦创建就不应手动更新。

【问题讨论】:

    标签: google-app-engine session google-oauth webapp2


    【解决方案1】:

    它必须是这样的:

    self.auth.set_session_data(updates)
    

    但这会清除所有已经存在的密钥(例如身份验证工作所需的“user_id”),所以可以改为这样做:

    session_data = self.auth.get_session_data()
    session_data['fullname'] = 'sdsdsdsdsd'
    self.auth.set_session_data(session_data)
    

    我不知道你试图传入的 session 变量是什么,但 set_session_data() 只设置了 self.session

    【讨论】:

    • 非常感谢您的帮助。有用!但是,我仍然对第一个问题感到好奇,即经常更新会话是一种好习惯还是应该避免?请对此也有所了解,以便我接受您的回答。
    • 我想不出为什么会不好的原因,但话又说回来,这真的取决于您在这些“更新”中所做的事情。我看到的唯一潜在风险是,如果客户端由于超时而无法获取您的新 cookie,服务器可能会收到陈旧的 cookie。
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2011-02-12
    相关资源
    最近更新 更多