4000-9696-28

互联网从业者必须要懂的Cookie、Session、Token知识

2023年07月10日 14:33供稿中心:北大青鸟总部

摘要: 作为一个互联网从业者,无论是产品经理、开发人员,还是测试人员、运维人员,了解个人信息相关技术实现都是必须的。如果用三个词来概括的话,那便是Cookie、Session、Token。

这是一个最好的时代,我们的衣食住行、吃喝玩乐,通过一个手机就可以完成。比如我们想去吃个饭,那么只需要打开美团APP,搜索哪个餐厅的饭菜最好吃,再使用滴滴APP叫个车直接从家门口送到餐厅,到了餐厅后打开微信APP扫描二维码点餐,点完餐后打开微博APP刷刷微博、抖音APP刷刷视频、微信APP聊聊天、淘宝APP购购物,等待美食的到来,饭菜上桌后使用美图秀秀APP先拍个照、录视频发发朋友圈,开吃,吃完饭后使用支付宝或微信扫码付款,再使用滴滴叫个车回家。全程你只需要带一个手机就好,有了手机一切都可以搞定,噢,也许你还要带个充电宝,做好弹药支撑。毫无疑问,在今天,我们再也离不开手机了。

在我们使用手机上网时,所有的内容都是以我为中心来触发的,美团app是我的账号在登陆,记录的是我相关的信息,同理其它的APP也是个人账号登陆,在Web端使用浏览器进行工作时也是以个人账号登陆完成的。因此可以说在所有互联网应用中,个人相关的信息非常重要,个人信息相关技术的实现也非常重要,它是一切的根源,就像氧气一样,不能没有它。所以作为一个互联网从业者,无论是产品经理、开发人员,还是测试人员、运维人员,了解相关技术实现都是必须的。如果用三个词来概括的话,那便是Cookie、Session、Token。

Cookie是浏览器存储的一段文本信息,用于客户端和服务器进行交互。我们现在所使用的在线服务,都是通过HTTP协议进行交互的,客户端通过HTTP协议发送请求给到服务端,服务端计算查询获取结果再返回给客户端。早期的在线网络服务很简单,每次请求通过HTTP发起,服务端返回就好,那会儿上网也贵,上网的人也少,大家对于网络服务没啥要求。慢慢的随着互联网和移动通信网络的发展,上网开始变得便宜起来,上网的人也变得多了起来。大家开始对互联网有了一些要求,比如不再希望每次上网时都登陆个人信息,因为记住自己的用户名和密码是一件非常麻烦的事情,甚至记录浏览网站的地址也很麻烦。这时候通过Cookie技术,服务端可以给用户发放属于个人的唯一标识符,通过HTTP协议传递给客户端,客户端可以浏览器通过Cookie缓存服务端发送给客户端的个人唯一标识,此后每次只要是该用户访问时,就在HTTP请求中带上Cookie,就可以不用再登陆了,系统自动填充用户名和密码。打开浏览器时,其实也本机是在使用浏览器这个产品,因此也会存储该台电脑的历史记录,我们就可以看到最近访问的网络链接,再也不用记住复杂的网址了。



在Cookie中缓存的个人唯一标识,就是SessionID。客户端和浏览器的每一次会话就是一次Session,每个用户一个SessionID。在用户通过客户端和服务器进行交互时,通过HTTP请求发送用户名和密码,服务器验证通过后,在当前会话中保存相关数据,并且返回一个SessionID,通过Set-Cookie写入该用户的Cookie。自此,用户每一次请求都会通过Cookie把SessionID传递给到服务端,服务端根据SessionID找到之前的数据,呈现给到用户。在HTML中提供三种方式保存Session,Cookie、LocalStorage、SessionStorage,关于Cookie大家比较清楚了,LocalStorage就是在客户端中存储的,永久生效,SessionStorage是在当前会话中生效,关闭页面或浏览器后被清理。通过Session技术很好的实现了客户端和服务器之间的交互,还有一些数据分析工具通过采集SessionID来计算用户UV,定位单次会话上所产生的问题。



Session技术虽然很好,但它也有两个缺点,即不安全、扩展性差。所谓不安全指的是,在网络访问中,如果有其它黑客或钓鱼网站获取到了我的SessionID,并且在自己的网络请求中加入这个SessionID之后,就可以伪冒本人进行交易,甚至导致个人信息泄漏。所谓扩展性差指的是,SessionID是由服务器生成的,如果有多个服务器部署了服务(在分布式场景下非常常见),那就会出现A服务器发放的SessionID在访问B服务器请求时用不了,因为这个SessionID所存储的信息是在服务器A上,不在服务器B上,这样的用户体验是很不好的。聪明的小伙伴可能说那就用一台服务器来专门存储转发Session,所有的请求都先和这台服务器建立会话,再通过这个服务器转发给其它服务器处理,这样倒是解决了服务多机器部署的问题,但是也带来了单点问题,这条Session服务器挂掉了就完蛋了,这样的用户体验同样也是不好的,因此Token技术出现了。

基于Token的身份验证技术流程是这样的,用户在HTTP请求中发送用户名和密码,后端程序验证是否通过,如果用户名和密码正确合法,则返回一个签名的token给到客户端,客户端通过Cookie存储token,每次发送请求时带上token,服务端验证token正确与否再决定是否发放数据。在Token访问机制中,扩展性很好,因为是客户端携带的是一个Token,在分布式部署的服务场景下,任意服务器验证下Token是否正确就好,它也很安全,因为在请求中发送token而不是cookie,即使获取了Cookie也没办法伪造用户。



作为一个互联网从业者,当我们使用互联网服务时,如果访问不正常了,或者访问数据不对了,那么可以通过判断Cookie是否失效、Cookie中是否含有对应的SessionID或者Token做初步的判断,在排查问题中也首先判断是否是个人问题,不过切忌不要获取别人的Cookie或SessionID来做不合适的事情。


标签:
关于我们
公司简介
发展历程
青鸟荣誉
联系我们
加入我们
青鸟课程
BCVE视频特效课程
BCUI全链路UI设计
BCSP软件开发专业
BCNT网络工程师
启能职业教育基础课程
学习客户端下载
青鸟优师
青鸟云课堂
微信 公众号 咨询 顶部 首页
官方新版意见收集

*

官方新版意见收集

提交成功,感谢您的反馈。

我们会认真阅读和考虑每个用户的反馈。