Cookie与Session的来源
在这咱们就拿一个简单的登录来说,当用户来到我们的登录页面,输入用户名与密码后点击“登录”按钮之后,浏览器将页面上的认证信息通过POST给我们的服务器,当验证通过后,浏览器就会跳转到我们的主页面
那登录成功之后,我们的服务器又该如何验证用户在别的页面的访问权限呢?因为HTTP协议是无状态的,所以我们的服务器根本就没办法辨别刚刚验证通过的用户,现在发起的请求是不是通过了验证。
而我们又不能因为HTTP无状态,让用户在每次发起请求的时候,都要输一次账号密码验证,要真这样搞,我想咱家的网站距离倒闭的日子,指日可待啊
那总得想办法解决吧,最简单的方案就是所有的请求里都带上用户名与密码,虽然可行,但是大大的加大了我们服务器的负担,这回咱家公司是买服务器买倒闭的。。。
那么只要客户端或者服务器中保存着可以代表身份的信息,那这样我们就不需要每次都验证用户名与密码了,有了这个身份信息,我们就可以辨别,发起请求的用户是不是已经通过验证了,这就有了Cookie与Session
总结起来其实就是一句话:因为Http协议无状态,在需要识别状态的时候,需要借助外力来辨别,而这个外力就是Cookie与Session
什么是Cookie
image.pngCookie是存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问我们的服务器的时候,浏览器通过HTTP协议,将他们本地的Cookie内容也发到咱们服务器上,从而完成验证
Cookie又分为了会话Cookie与持久Cookie,要区分这两种类型,非常的简单,持久Cookie就是我们设置了它的过期时间,而没设置过期时间的,都属于会话Cookie
因为当我们设置了Cookie的过期时间,那么这个Cookie就会存储在用户的硬盘中,而不是在内存中,因为不在内存中,不管用户是关闭浏览器,还是关机重启,只要在有效时间内,这个Cookie都能用
什么是Session
image.pngSession也非常简单,这货存储在我们的服务器上,就是在我们的服务器上保存用户的操作信息
当用户访问我们的网站时,我们的服务器会成一个Session ID,然后把Session ID存储起来,再把这个Session ID发给我们的用户,用户再次访问我们的服务器的时候,拿着这个Session ID就能验证了,当这个ID能与我们服务器上存储的ID对应起来时,我们就可以认为是自己人
Cookie与Session的不同
这是在面试中最容易被问到的问题,其实弄明白了上面的内容,这个问题就是送分题
首先就是存储方式的不同
,Cookie是存储在用户的计算机上
,而Session是存储在我们的服务器上
因为用户的账号密码存储在用户的计算机上,所以Cookie并不安全
,但Session就一定安全么?听说过Session劫持,XSS攻击
,就知道它本身并不是安全的,要是不进行安全防护,那肯定也就不安全了(关于Cookie与Session的安全性问题,我会专门写一篇文章来说)
所以,从安全性上来说,Session比起Cookie来说,还是要更安全的
用户在使用Cookie的时候,因为需要随着请求一起将Cookie发送给服务器,所以为了访问速度,Cookie的大小肯定不能太大,不然仅仅一个Cookie的传递,就把网络给搞死了,那还玩什么……而因为Session只需要传个ID就好了,内容什么的,咱们服务器上都有呢,随便存多少都可以。
从这点也能看出,Cookie与Seesion的存储内容大小也是有区别的
网友评论