cookie是保存在用户浏览器端,以JSON的形式保存用户名和密码等明文信息
session使用原理
#2.1 session使用原理
1. session是存储在服务器端的一段字符串,相当于字典的key
2. 验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会话中。
3. 服务器向用户返回session_id, session信息都会写入到用户的Cookie。
4. 用户的每个后续请求都将通过在Cookie中取出session_id传给服务器。
5. 服务器收到session_id并对比之前保存的数据,确认用户身份。
#2.2 session使用缺点
1. 这种模式最大的问题是,没有分布式构架,无法支持横向扩展。
2. 如果使用一个服务器,该模式完全没有问题。
3. 但是,如果它是服务器群集或面向服务的跨域体系结构的话,则需要一个统一的session数据库来保存会话数据实现。
4. 这样负载均衡下的每个服务器才可以正确的验证用户身份。
#总结:
第一种:没有session持久化
1. 没有分布式构架,无法支持横向扩展
2. session默认存储在内存中,如果把代码部署在多台机器上,session保存到了其中某一台机器的内存中。
3. 用户如果在A机器上登录,只有A机器的内存中存了这个session的key,如果请求Nginx路由到B机器,B机器内存中没有这个session数据,就需要从新登录。
?
第二种:写入数据库或文件持久层
1. 解决了横向扩展问题。
2. 数据库持久层出现问题,所有集群都没办法登录,单点故障。
3. 如果数据放到mysql中,用户量过大,查询很慢,效率很低。
?
?
?
#2.3 常用解决session方法
1. 一种解决方案是通过持久化session数据,写入数据库或文件持久层等。
2. 收到请求后,验证服务从持久层请求数据。
3. 依赖于持久层的数据库或者问题系统,会有单点风险,如果持久层失败,整个认证体系都会挂掉。
Cookie和Session的区别
1. 存放位置不同
Cookie保存在客户端,Session保存在服务端。
2. 存取方式不同
Cookie只能保存ASCII字符串,如果需存储其他类型需要编码,最大能存储4KB
Session能存储任何类型的数据,理论上没有大小限制
3. 安全性
Cookie存储在浏览器,对客户端可见,容易泄露信息。
Session存储在服务器,不存在信息泄露。
4. 对服务器造成的压力不同
Cookie保存在客户端,不占用服务器资源。
Session保存在服务器,每个用户都会产生一个Session,如果并发访问的用户很多,会耗费大量内存。
5. 跨域支持上的不同
Cookie支持跨域名访问。
Session不支持跨域名访问,Session仅在他所在的域名内有效。
Session和JWT的区别
#session
session机制是一把钥匙(session_id),请求是发送到服务器,通过session_id获取session_data,从而进行用户认证。
#JWT
JWT机制是,客户端访问服务器后,返回一个JWT保存在浏览器,用户每次访问该网站都会携带JWT,服务器通过解密JWT的内容,和服务器进行比对,从而进行用户验证。
原文:https://www.cnblogs.com/kai0118/p/13771100.html