Flask 后端服务重启,为什么前端用户不需要重新登录?

问题定义

我们都知道session是服务端的存储结构,存储用户的登录信息。

那问题是,如果Flask后端做了重启,这些session数据就会消失;

可是我发现,前端用户依然不用重新登录,而重启后的后端,也依然可以通过session.get("user_name")获取到session,这是为什么?

原因

Flask 中默认是直接将 服务器端的 session 存储在客户端浏览器的 cookie 中,当然是加密过的,意思就是说,后端在 session 里面写入什么数据,就会被加密存储到客户端 cookie 里面,浏览器中那条叫做 session 的 cookie 就是加密数据,只要你明白算法,知道密钥,理论上就可以把 session 的数据都算出来,所以在 flask 中如果想要使用 session 就必须要设一个 SECRET_KEY ,这就是 session 加密的密钥。

将 session 放在 cookie 中有好处,也有坏处。好处是不受服务器端影响,flask 重启仍然可以使用,如果放在内存中,后端重启,前端全部需要再次登录。

坏处是如果存很多数据在 session 里面,那么 cookie 就会非常大,而前端是不应该存储大量数据,而且容易被人破解,虽然即使是同样的 session 数据,每次加密生成 cookie 也不同,但是也还是不安全,怪不得 cookie 中的这条数据叫做 session,而不是session_id 或者 sid。

因此,可以多机器部署,不用改在成分布式Session存储

正因为session存储在客户端,那么服务端的重启不会影响用户的登录状态。

那么如果后端改成双机器部署,也不会影响用户的使用;

如果session不是存储在cookie而是服务的内存,那么就得保持多个机器的sessio数据同步,引入redis等第三方存储才可以解决。

参考链接:

https://windard.com/blog/2017/10/17/Flask-Session

相关推荐