3分钟搞懂Cookie与Session

为何要写这么老的内容

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指标还压的紧,再加上本身在调节睡眠,因此更新频率下来了​

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

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

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