阅读 18

session与cookie


session与cookie

Snipaste_2020-02-16_17-29-47.png

首先,先来看一下会话的概念;

想必大家都听说过HTTP协议吧。这里不做过多的表述,不同自行百度即可;

说一下HTTP协议的最突出的特点就是一种无状态的协议,一旦数据交换完毕,就会关闭连接,如果需要再次交换新的数据,就需要重新建立连接,这样服务器端是无法跟踪上一次的会话,服务端会把它作为新的客户端来处理,那么会出现以下的场景:

  • A 买了商品A,B买了商品B,最后商品A放入了B的购物车中,B放进了A的购物车中

    1-11-1.png

这样的情形是我们不愿意看到的,我们想要的是重新登录或者返回上一个页面,我们所保存的东西依旧属于自身,而不是发生混乱,所以,我们必须引入一种会话机制来处理这种现象。

其实,对于会话这个东西我们已经很熟悉了,我们在使用网站的时候,本地或者服务端会将你的登录信息根据一定的规则进行保存,这样你跳转页面时,就会一直保存状态

1-21-2.png

cookie

简介cookie机制

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息;

22.png

我们打开网页也可以看到这个字段:

33.png

44.png

基本流程就是:

  • 客户端发送一个http请求到服务器端

  • 服务器端发送一个http响应到客户端,其中包含Set-Cookie头

  • 客户端发送一个http请求到服务器端,其中包含Cookie头部

  • 服务器端发送一个http响应到客户端


对于cookie的应用,一般是Web开发中使用的多一点,目前由于Session的出现,使用session会越来越多,对于服务端开发的人来说,这两种机制都需要了解一下;

在JAVA中集成cookie的所有方法,供我们调用开发,具体不在赘述;

后续会有案例来说明;;

session

Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力;

过程:

  • 浏览器第一次请求服务器时,服务器会生成一个sessionid,并返回给浏览器,这个sessionid会被保存在浏览器的会话cookie中

    55.png

  • 如果浏览器不关闭,浏览器每次请求的时候回携带sessionid到服务端;

    66.png


session有过期时间,但是这是可以设置的;如果超过这个时间点,sessionid过期后,会产生新的sessionid出来;

Cookie与Session的区别

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上;

  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;

  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;

  4. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

总结

虽然Cookie和Session的方案分别属于客户端和服务端,但是服务端的session的实现对客户端的cookie有依赖关系的,通过上面使用session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie;所以当完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用;当然还有另外一种实现session的方法,但是主要使用的是依赖cookie这种方式来进行的;

想了解学习更多C++后台服务器方面的知识,请关注:微信公众号:====CPP后台服务器开发====

转载是一种动力 分享是一种美德


温馨提示

如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。

扫码关注更多精彩

CPP后台服务器开发

qrcode_for_gh_63e8f112ec74_258.jpg