我觉得我已经养成了一个坏习惯,在使用一个框架过程中对它的内部原理非常感兴趣,有时候需要花不少精力才
明白,这也导致了学习的缓慢,但换来的是对框架的内部机理的熟悉,正如侯捷所说,源码面前,了无秘密。这也是
本文产生的直接原因。
一.flask session原理
flask的session是通过客户端的cookie实现的,不同于diango的服务器端实现,flask通过itsdangerous这个苦
将session的内容序列化到浏览器的cookie,当浏览器再次请求时将反序列化cookie内容,也就得到我们的session内容。
比如说session['name']='kehan',客户端session如下,
我们来解密这个cookie存储了什么值
该cookie通过.分割,分成了三部分:内容序列化+时间+防篡改值
通过第一部分我们就获得了session['name']的值,我们看看第二部分
第二部分保存的是时间,itsdangerous库为了减少时间戳的值,之前减掉了118897263,所以我们要加上。
这个时间flask是用来判断session是否过期使用的。
第三部分是session值和时间戳以及我们SECRET_KEY的防篡改值,通过HMAC算法签名。也就是说即使你修改了
前面的值,由于签名值有误,flask不会使用该session。所以一定要保存好SECRET_KEY,以及确保它的复查度,
不然一旦让别人知道了SECRET_KEY,就可以通过构造cookie伪造session值,这是很恐怖的一件事。