session与cookie
首先,先来看一下会话的概念;
想必大家都听说过HTTP协议吧。这里不做过多的表述,不同自行百度即可;
说一下HTTP协议的最突出的特点就是一种无状态的协议,一旦数据交换完毕,就会关闭连接,如果需要再次交换新的数据,就需要重新建立连接,这样服务器端是无法跟踪上一次的会话,服务端会把它作为新的客户端来处理,那么会出现以下的场景:
A 买了商品A,B买了商品B,最后商品A放入了B的购物车中,B放进了A的购物车中
这样的情形是我们不愿意看到的,我们想要的是重新登录或者返回上一个页面,我们所保存的东西依旧属于自身,而不是发生混乱,所以,我们必须引入一种会话机制来处理这种现象。
其实,对于会话这个东西我们已经很熟悉了,我们在使用网站的时候,本地或者服务端会将你的登录信息根据一定的规则进行保存,这样你跳转页面时,就会一直保存状态
cookie
简介cookie机制
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息;
我们打开网页也可以看到这个字段:
基本流程就是:
客户端发送一个http请求到服务器端
服务器端发送一个http响应到客户端,其中包含Set-Cookie头
客户端发送一个http请求到服务器端,其中包含Cookie头部
服务器端发送一个http响应到客户端
对于cookie的应用,一般是Web开发中使用的多一点,目前由于Session的出现,使用session会越来越多,对于服务端开发的人来说,这两种机制都需要了解一下;
在JAVA中集成cookie的所有方法,供我们调用开发,具体不在赘述;
后续会有案例来说明;;
session
Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力;
过程:
浏览器第一次请求服务器时,服务器会生成一个sessionid,并返回给浏览器,这个sessionid会被保存在浏览器的会话cookie中
如果浏览器不关闭,浏览器每次请求的时候回携带sessionid到服务端;
session有过期时间,但是这是可以设置的;如果超过这个时间点,sessionid过期后,会产生新的sessionid出来;
Cookie与Session的区别
cookie数据存放在客户的浏览器上,session数据放在服务器上;
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;
总结
虽然Cookie和Session的方案分别属于客户端和服务端,但是服务端的session的实现对客户端的cookie有依赖关系的,通过上面使用session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie;所以当完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用;当然还有另外一种实现session的方法,但是主要使用的是依赖cookie这种方式来进行的;
领取专属 10元无门槛券
私享最新 技术干货