3分钟搞懂Cookie与Session

Cookie与Session的来源

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

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

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

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

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

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

什么是Cookie

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

image.png

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

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

什么是Session

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

image.png

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

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容