我正在努力将示例代码从Flask转换为twisted。烧瓶程序将数据存储在如下的会话中:
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)
在这种情况下,会话是一个全球性的瓶子,但我想在扭曲中完成同样的事情。基本上我想在我的会话中存储值,以便我可以在其他请求中使用该数据。
我知道我可以在request.getSession()中访问会话数据并看过一些计数器的例子,但这个想法并没有转化为我想要做的事情。
任何人都可以解释我如何在扭曲的会话中设置和检索数据?正如我所说,我已经看到了反例,需要一个更具体的例子说明如何做到这一点。
谢谢!
答案 0 :(得分:1)
很久以前就构思了Twisted的会话代码,并且在Web服务器领域发生了很多变化。我不确定这是否是最佳方式"这样做但您可以使用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)
这使您可以在会话方面更灵活。例如,如果您有另一个非扭曲的Web应用程序,则可以轻松地从cookie中获取会话令牌。