3分钟搞懂Cookie与Session

3,340 阅读6分钟

为什么要写这么老的内容

CookieSession很早就有了,这么多年来也没什么变动与更新,但是到现在,面试时被问到这俩哥们的概念的概率也是非常大,网上写这哥俩的文章也是非常之多

为什么还要写呢,因为我突然想起几年前我在准备面试的时候,网上基本没有那种又简单,又清楚来描述这俩货的文章,就算到现在我也没见到

就像Git的使用一样,基本上很多人都说半个小时就能学会,可你真从零开始去学的时候,花了一两天的时间可能还不知道怎么用,明明就是一个很简单的工具使用,偏偏被整的无比高大上,我只需要找个起子去拧个螺丝罢了,而你偏偏要告诉我怎么去制作这个起子,真的很难受

其实要弄明白CookieSession这哥俩的作用与区别,只需要知道他们怎么来的,基本上就弄明白了

Cookie与Session的来源

咱们做网站开发的,应该都接触过用户登录验证,就算在公司没接触过,我就不信你刚入门的时候没跟着教程学着做一个登录验证的小功能

在这咱们就拿一个简单的登录来说,当用户来到我们的登录页面,输入用户名与密码后点击“登录”按钮之后,浏览器将页面上的认证信息通过POST给我们的服务器,当验证通过后,浏览器就会跳转到我们的主页面

那登录成功之后,我们的服务器又该如何验证用户在别的页面的访问权限呢?因为HTTP协议是无状态的,所以我们的服务器根本就没办法辨别刚刚验证通过的用户,现在发起的请求是不是通过了验证。

而我们又不能因为HTTP无状态,让用户在每次发起请求的时候,都要输一次账号密码验证,要真这样搞,我想咱家的网站距离倒闭的日子,指日可待啊

那总得想办法解决吧,最简单的方案就是所有的请求里都带上用户名与密码,虽然可行,但是大大的加大了我们服务器的负担,这回咱家公司是买服务器买倒闭的。。。

那么只要客户端或者服务器中保存着可以代表身份的信息,那这样我们就不需要每次都验证用户名与密码了,有了这个身份信息,我们就可以辨别,发起请求的用户是不是已经通过验证了,这就有了CookieSession

总结起来其实就是一句话:因为Http协议无状态,在需要识别状态的时候,需要借助外力来辨别,而这个外力就是Cookie与Session

在说Cookie与Session的内容之前,前方高能预警

我臭不要脸的画了2张鬼画符给大家参考理解,那个…想给我点面子的,现在急刹车退出还来得及…

好了,废话不多说了,步入正题!

什么是Cookie

Cookie是存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问我们的服务器的时候,浏览器通过HTTP协议,将他们本地的Cookie内容也发到咱们服务器上,从而完成验证

千言万语不如一张图,灵魂画手登场

Cookie又分为了会话Cookie与持久Cookie,要区分这两种类型,非常的简单,持久Cookie就是我们设置了它的过期时间,而没设置过期时间的,都属于会话Cookie

因为当我们设置了Cookie的过期时间,那么这个Cookie就会存储在用户的硬盘中,而不是在内存中,因为不在内存中,不管用户是关闭浏览器,还是关机重启,只要在有效时间内,这个Cookie都能用

什么是Session

Session也非常简单,这货存储在我们的服务器上,就是在我们的服务器上保存用户的操作信息

当用户访问我们的网站时,我们的服务器会成一个Session ID,然后把Session ID存储起来,再把这个Session ID发给我们的用户,用户再次访问我们的服务器的时候,拿着这个Session ID就能验证了,当这个ID能与我们服务器上存储的ID对应起来时,我们就可以认为是自己人

还是一样,千言万语不如一张图容易理解,灵魂画手再次登场

这图有没有点进步??我看起来还是有点进步的,只是这个字…因为是在手机上拿着手写笔写的,就有点惨不忍睹了……emmmm

Cookie与Session的不同

这是在面试中最容易被问到的问题,其实弄明白了上面的内容,这个问题就是送分题

首先就是存储方式的不同Cookie是存储在用户的计算机上,而Session是存储在我们的服务器上

因为用户的账号密码存储在用户的计算机上,所以Cookie并不安全,但Session就一定安全么?听说过Session劫持,XSS攻击,就知道它本身并不是安全的,要是不进行安全防护,那肯定也就不安全了(关于Cookie与Session的安全性问题,我会专门写一篇文章来说)

所以,从安全性上来说,Session比起Cookie来说,还是要更安全的

用户在使用Cookie的时候,因为需要随着请求一起将Cookie发送给服务器,所以为了访问速度,Cookie的大小肯定不能太大,不然仅仅一个Cookie的传递,就把网络给搞死了,那还玩什么……而因为Session只需要传个ID就好了,内容什么的,咱们服务器上都有呢,随便存多少都可以。

从这点也能看出,Cookie与Seesion的存储内容大小也是有区别的

写在最后的废话

说三分钟搞懂就三分钟,绝不唬人,应该也算是简单易懂并且容易记忆了。

这个4月,更新比较少,甚至断更了一个星期,因为最近公司项目赶进度,KPI指标还压的紧,再加上自己在调节睡眠,所以更新频率下来了​

三月份的时候,天天写文熬夜到2、3点,在三月底的时候,明显感觉到自己身体状况不佳,头发掉了一大半。为了守护住日渐上移的发际线,我还是准备早睡早起了。

再过几天,公司的项目压力没那么大的时候,就又可以稳定更新了。

扫码关注微信公众号「闹闹吃鱼」,领取程序员学习大礼包!都是经过我本人筛选,整理后的好资源,不仅仅只是技术~!