cookie和session
cookie和session共同点
cookie和session都是用来跟踪浏览器用户身份的会话方式。
cookie:
Cookie是由服务器端生成,发送给浏览器,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时自动发送该Cookie给服务器
Cookie可以用来在某个WEB站点会话间持久的保持状态
session:
Session是另一种记录客户状态的机制,基于Cookie实现,不同的是Cookie保存在客户端浏览器中,
而Session保存在服务器上客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session,
客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了
cookie和session区别:
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
(5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
Cookie的工作原理
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
Session的工作原理
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
JWT
现在,我们在做状态保持的时候,更多的是使用 JWT。
JWT 全称 Json Web Token,为了解决 session 遗留下来的问题:
对服务器压力大
扩展性弱,无法进行横向扩展
JWT 就能够有效的解决上面的问题,JWT 原理就是将用户的数据重新让客户端保存。这一点很像 cookie,
但是和 cookie 最大的区别在于数据是加了密的,所以保存在客户端上面是安全的
它是一个很长的字符串,中间用点(.)分隔成三个部分
Header(头部) Header 部分是一个 JSON 对象,描述 JWT 的元数据
Payload(载荷) Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据
Signature(签名) Signature 部分是对前两部分的签名,防止数据篡改
token:身份验证
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据