Cookie和Session和Token的作用

HTTP是无状态的,比如:访问服务器,需要用户名和密码进行登录,关闭网页,再次访问服务器,服务器是没有意识到又是自己来访问的,需要再次输入用户名和密码,而为了方便就需要用到cookie和session这两项技术,这两项技术都用到的存储的思想


先说cookie,cookie存储在客户端,即浏览器。浏览器发起HTTP请求,服务器会进行cookie设置,即set-cookie。cookie有名和值两个重要属性,服务器会把名和值两个属性的内容填充完整,cookie发给浏览器之后,浏览器会存储起来,这样浏览器发送给服务器的每个请求都会附上这个cookie,这样就可以不需要再次输入用户名和密码了。但实际上,在浏览器是可以看到cookie的内容的

也就是说用户名和密码放在cookie中是很不安全的


后来就有了session,session存储在服务器,即会话。不同的服务器与不同的用户的会话都设置了时间(会话结束的时间)及唯一的ID(Session ID),举个例子:输入用户名和用户密码发送请求给B站服务器,B站服务器核对数据库中的信息,确认用户名和密码是正确的,就在服务器这边创建一个Session ID和会话结束的时间,Session ID通常是一串没有规律的字符串,设置cookie,并将Session ID加入到cookie里,再把会话结束的时间设置成这个cookie的有效期,浏览器拿到cookie后进行保存(浏览器此时保存的没有用户名和密码,保存的Session ID是一串没有规律的字符串,而且服务器发送cookie之前会对含有Session ID的cookie进行签名)。浏览器之后的访问都会自动发送这个含有Session ID的cookie给B站服务器,直到cookie的有效期过了,浏览器一般会自行删除这个cookie,即回话结束。


随着互联网的发展,用户也会越来越多,如果服务器依旧使用基于cookie的session,在特定时间有大量用户进行访问服务器,服务器就需要存储大量Session ID在数据库中,如果数据库奔溃了,又会影响服务器获取Session ID,在多种因素和需求的影响下,就诞生出了JWT(Json Web token)这一种技术。token存储在客户端。用户第一次登录网页后,服务器会发送一个JWT,服务器不需要保存这个JWT,只需要保存JWT签名的密文,接着把JWT发送给浏览器,可以让浏览器以cookie或者storage的形式进行存储,假设以cookie的形式存储,用户每次访问该网页都会发送这个JWT发送给服务器,JWT由三部分组成:header.payload.signature。头部、负载、签名。具体内容可以去JWT渗透与防御这部分的概述查看。


总结:

cookie是存储在客户端的,本质上就是一种数据载体。

session是诞生并存储在服务器的,由服务器主导一切,把session放到cookie中发送到客户端,cookie跟随每个HTTP请求发送出去。

token是诞生在服务器,但是发送并存储在客户端,由客户端主导一切,可以放在cookie或storage中,持有token就像持有“令牌”一样可以允许访问服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值