Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在twisted会话中存储数据_Python 3.x_Session_Flask_Twisted_Twisted.web - Fatal编程技术网

Python 3.x 在twisted会话中存储数据

Python 3.x 在twisted会话中存储数据,python-3.x,session,flask,twisted,twisted.web,Python 3.x,Session,Flask,Twisted,Twisted.web,我正在将示例代码从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()

我正在将示例代码从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)
在本例中,会话是一个烧瓶全局会话,但我想在twisted中完成同样的事情。基本上,我希望在会话中存储值,以便在其他请求中使用该数据

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

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


谢谢

Twisted的会话代码是很久以前构思的,在web服务器环境中已经发生了很多变化。我不确定这是否是一种“最佳方式”,但您可以使用JWT将会话信息存储在cookie中。下面是一个使用


这使您在会话方面更加灵活。例如,如果您有另一个非twisted web应用程序,您可以很容易地从cookie中获取会话令牌。

我只想说明,此方法使会话值仅可防篡改。
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)