详解cookie和session

2018-08-03  本文已影响0人  旺旺大仙贝
image.png

1.为什么需要cookie和session

1.HTTP协议无连接

无连接

HTTP每次连接只处理一个请求,服务端处理完客户端的请求,并受到客户端的应答后,就断开TCP连接

为什么无连接

HTTP协议产生于互联网,服务器需要处理面向全世界的成千上万的客户端的网页访问,每个客户端(浏览器)与服务器交换数据的间歇较大,因此如果保持这个连接,那么大多数时间都是空闲浪费的。因此HTTP的设计者将其设计为请求时建立连接,请求完毕释放连接,将资源尽快释放出以服务其他客户端。

无连接的优点和缺点

优点:释放资源,不浪费资源。
缺点:随着互联网发展,网页变得越来越复杂,网页里嵌套的东西越来越多(图片,视频等),每次访问都要重新建立一次TCP连接显得低效。

解决HTTP无连接低效的办法

Keep-Alive:使客户端和服务器的连接持续有效,当客户端对服务器发起二次三次请求时,可以避免重新建立连接。当然不可避免会带来占用资源影响性能的问题,特别当WEB服务器和应用服务器在同一台机器上运行时影响较突出。

2.HTTP协议无状态

无状态

无状态是指HTTP协议对事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,客户端给服务器发送HTTP请求后,服务器根据请求,传回数据,整个过程完成后服务器不会记录任何信息。

为什么无状态

第一,历史原因。设计HTTP最初目的就是为了提供一种发布和接收HTML页面的方法,那时候没有动态页面,只有静态HTML页面,因此不需要保持状态。
第二,跟HTTP无连接也有关系。既然HTTP完成一次请求之后就会断开TCP连接,服务器完全无法预知客户端的下一个工作,甚至不知道客户端会不会再次访问,这样保持用户的访问状态也没必要了。
第三,在满足基本功能前提下,把HTTP设计得相对简单,其实也是赋予了一种扩展能力,将一些复杂的功能扩展到以HTTP为基础的技术之上。

无状态的优点和缺点

优点:解放了服务器,每一次请求都“点到为止”,不会造成不必要的连接占用。
缺点:随着互联网发展,动态交互的WEB引用出现后,网页不再止于静态页面,人们对交互的要求越来越高,而交互又是需要承前启后的,比如一个很简单的购物车程序也是需要知道用户之前选择了什么商品。

解决保持HTTP状态的办法

Cookie和Session应运而生

2.Cookie和Session区别

3.Session建立流程

4.Session数据结构

上面说了session是一种数据结构,那么到底是哪种数据结构存储了session相关的变量呢?
先来猜测一下,首先session必须被同步操作,因为在多线程环境下session是现线程间共享的,而web服务器一般情况下都是多线程的(为了提高性能还会使用线程池),其次,这个数据结构要容易操作,最好是传统的键值对的存储形式。
通过以上两点,猜测应该是ConcurrentHashMap数据结构。
然后再来验证一下,查看tomcat的源码org.apache.catalina.session. ManagerBase类里的session实例,得到验证的确是ConcurrentHashMap。

protected Map<String, Session> sessions = new ConcurrentHashMap<String, Session>();

5.cookie和session的应用场景和其他比较

上一篇 下一篇

猜你喜欢

热点阅读