草稿:
flask-login类库涉及到flask的session对象,flasksession的源码在flask.sessions中,其中最重要的是open_session,save_session函数。顾名思义,open_session是解密的函数,save_session是加密的函数, 加解密使用的是itsdangerous库,使用到的是URLSafeTimedSerializer类。URLSafeTimedSerializer中重要的函数可以从以下几个开始看:
load_payload: decode的数据dump_payload:encode数据-
make_signer: 创建一个签名类实例,调用sign和unsign方法来给字符串签名,以及验证签名合法,raiseBadSignature,默认会以b'.'来将encode的数据和签名连接起来作为加密后的值。
dump_payload
源码位于URLSafeSerializerMixin.dump_payload, 具体过程如下:
- 调用超类的
dump_payload即json.dumps(obj, separators=(‘,’, ‘:’)) - 得到json再调用
zlib.compress进行压缩, 如果压缩后的长度比原来小就替换 - 调用
itsdangerous.base64_encode函数将json字符串encode,该函数主要是调用`base64.urlsafe_b64encode(b’xxx’).strip(b’=’) - 如果json是被压缩过的,在json前加一个b’.’, base64d = b’.’ + base64d,然后将字符串return
load_payload
是dupm_payload的反过程