NoSQL数据库(五)021-Egg+Redis+MongoDb实现登录流程——项目介绍、项目架构分析、cookie和session维持登录的原理
第五章 Egg + Redis + MongoDb实现登录流程( 补充 )
项目架构图
学习目标
需要一些前置知识,大家可以去看Egg的视频。如果nodejs基础比较扎实的同学不看也可以,同学们根据自身情况选择。
- 了解cookie和session的关系
- 从前后端角度全面了解登录流程
- 了解redis在登录流程中的作用
- 因为用户数据和浏览器交互非常频繁,而 redis非常的快,如果使用硬盘型数据库(mongo, mysql)频繁读写可能会遇到一些性能问题。
理解登录流程对于前端来讲,非常重要!
登录流程在面试中出现的频率的非常高,因为题目比较抽象,所以你很难背诵,可以考察很多方面的知识。
比如: 你做的项目中是如何进行登录的? 如何保持登录态的?
- http的理解
- cookie和session的区别
- 对数据库的理解
- web安全性(xss, csrf)
cookie 和 session是如何维持登录的?
session是基于cookie存在的一种形式。
举个例子: 假如cookie是米,session是粥。
- 那么他们是同一种东西吗?
- 他们都是米吗?
总结: 没有米就没有粥,他们都是米,但是不是同一种东西。
所以,没有cookie就没有session。
cookie的交互过程
- 浏览器第一次访问服务端 (此时无cookie)
- 服务端收到请求, 通过response携带一个 set-cookie字段给客户端
- 客户端收到response之后,根据set-cookie的内容,将cookie存储在浏览器本地
- 客户端再次发起请求的时候,就会将cookie带给服务端
cookie维持登录的过程
- 用户输入用户名,密码,通过request发送给服务端
- 服务端去数据库查询用户名密码对不对
- 如果正确,假如 你的用户名是 “jack”, 服务端将在response中set-cookie为"username=jack"。
- 浏览器下次再发起请求的时候,将携带 “username=jack” 这一段内容给服务端
- 服务端拿到"username=jack"之后,去数据库一查,发现有这个人,于是认为此人已登录
session的交互过程
和cookie一致,没有cookie就没有session。
session维持登录的过程
其实首先我们要搞清楚一点,如果仅仅只是需要维持登录,根本就不需要session,使用上面的方法完全够用。
但是我们设想一种场景:
你的公司有一百个系统,你的用户名是 “我是老板”。我希望只注册一次账号,就能涉及所有的权限,登录所有的系统。但是有的人,注册一次账号只能进入某些系统。如果使用set-cookie存储,我们可能需要在用户的系统中存一个这样的字符串。“username=我是老板&&系统A=true&&系统B=true&&系统C=true。。。”。
可能今天涉及系统权限,明天还会添加每个用户的菜单权限,这样是无止尽的。而且cookie最大只能存储4k的数据,总有一天会存满,显然这种方案是不成立的。
假如我们的cookie能够存储为对象,而且不受cookie的4k大小的限制,而且能够浏览器与服务端通信,那该有多好啊!
"我是老板":{
xxx1: 'xxx', xxx2: 'xxxx', ... }
于是session诞生了。
- 用户输入用户名,密码,通过request发送给服务端
- 服务端去数据库查询用户名密码对不对
- 如果正确,假如 你的用户名是 “jack”, 服务端将在response中set-cookie为"username=jack"。
- 并且同时服务端在数据库(mondoDb, mysql)中存储一些以jack为key的对象或者数据 (购物车,权限, 登录状态 等等 )
- 客户端再次访问的时候,将携带 “username=jack” 这样一个cookie,服务端会拿到"jack"去查询 (购物车,权限, 登录状态 等等 )
- 服务器根据查询到的信息,返回不同的页面到客户端
总结: cookie是将用户数据存储在本地,session是将用户相关的数据存储到服务端。
业务流程
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/kjbd-jg/10798.html