在扭曲会话中存储数据

storing data in twisted session

我正在努力将示例代码从 Flask 转换为 Twisted。 Flask 程序正在像这样在会话中存储数据:

session['samlUserdata'] = self.auth.get_attributes()
session['samlNameId'] = self.auth.get_nameid()
session['samlSessionIndex'] = self.auth.get_session_index()
session['samlExpiration'] = datetime.now() + timedelta(minutes=SESSION_LENGTH)

在这种情况下,session 是一个全局的 flask,但我想在 twisted 中完成同样的事情。基本上我想在我的会话中存储值,以便我可以在其他请求中使用该数据。

我知道我可以访问 request.getSession() 中的会话数据,并且看到了一些计数器示例,但这个想法并没有转化为我正在尝试做的事情。

谁能解释一下我将如何在扭曲的会话中设置和检索数据?正如我所说,我已经看到了反例,需要一个更具体的例子来说明如何做到这一点。

谢谢!

Twisted 的会话代码是很久以前构思出来的,并且在 Web 服务器领域发生了很多变化。我不确定这是否是 "optimal way" 的做法,但您可以使用 JWT 将会话信息存储在 cookie 中。这是一个使用 klein

的示例
import uuid
from klein import Klein
import jwt

router = Klein()

@router.route('/jwt')
def cookie_magic(request):
    # set cookie if none
    if request.getCookie(b'session_token') is None:
        session_id = uuid.uuid4().hex
        session_token = jwt.encode({'foo': session_id}, '@TODO Secret', algorithm='HS256')
        request.addCookie(b'session_token', session_token)
        return 'session_id set to {0}'.format(session_id)

    # get the cookie
    session_token = jwt.decode(request.getCookie(b'session_token'), '@TODO Secret', algorithm='HS256')
    return 'hello {0}'.format(session_token['foo'])

router.run('0.0.0.0', 7777)

这可以让您在会话方面更加灵活。例如,如果您有另一个非扭曲的网络应用程序,您可以轻松地从 cookie 中获取会话令牌。