浅谈Cookie、Session与Cache的区别

     之前实现数据的缓存有多种方法,如客户端的Cookie,服务器端的Session、Application。web

     1、Cookieredis

     Cookie是保存客户端的一组数据,主要用来保存用户的我的信息,主要存放浏览器请求服务器时的请求信息,这些信息是非敏感信息。主要用于当用户访问您的系统时,应用程序能够检索之前存储的信息。
数据库

     一、保存时间能够根据须要进行设置:数组

          1)若是没有设置Cookie失效日期,它的生命周期保存到关闭浏览器为止;浏览器

          2)若Cookie对象的Expires属性设置为MinValue,表示永不过时;缓存

     二、Cookie存储的数据量受限制,大多数的浏览器约束为4KB左右,因此不要存放太大数据。安全

     三、Cookie的关键特性:服务器

          1)存储在客户端的磁盘上;session

          2)是与用户相关的数据;性能

          3)在必定的时间内持久化存储;

          4)能够跨浏览器共享数据;

          5)数据须要被序列化;

          6)会发生客户端与服务器端数据传输;

          7)用户相关;

     2、Session

     Session是由应用服务器维持的一个服务器端的存储空间,是一种保存上下文信息的机制,它是针对每个用户的。用户在链接服务器时,服务器会生成一个惟一的SessionID,用该SessionID为标识符来存取服务器端的Session存储空间,面SessionID这一数据是以Cookie形式保存在客户端。用户提交页面时,会将SessionID提交到服务器端,来存取Session数据。这一过程是不用开发人员来干预的,因此一旦客户端禁用Cookie,Session理论上也会失效,但服务器也能够自动经过URL重写的方式来传递SessionID的值,所以也不是彻底依赖Cookie,而且这个过程对于开发人员是透明的。

     因此,即便不写Cookie,在使用Request.GetCookies()方法取出的Cookie数组长度也是1,而这个Cookie的名字就是JSessionID,还有一个很长的二进制字符串,这就是SessionID的值。

     备注:

     为何会有Cookie呢,你们都知道,Http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,并且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢,Session就是一种保存上下文信息的机制,它是针对每个用户的,将变量的值保存在服务器端,经过SessionID来区分不一样的客户,Session是以Cookie或URL重写为基础的,默认使用Cookie来实现,系统会创造一个名为JSessionID的输出Cookie,咱们叫作Session-Cookie,以区别Persistent-Cookie,也就是咱们一般所说的客户端Cookie,注意Session-Cookie是存储于浏览器内存中的,并非写到硬盘上的,这也就是咱们刚才看到的JSessionID,咱们一般情是看不到JSessionID的,可是当咱们把浏览器的Cookie禁止后,Web服务器会采用URL重写的方式传递SessionID,咱们就能够在地址栏看到SessionID=KWJHUG6JJM65HS2K6之类的字符串。

     明白了原理,咱们就能够很容易的分辨出Persistent-CookieSession-Cookie的区别了,网上那些关于二者安全性的讨论也就一目了然了,Session-Cookie针对某一次会话而言,会话结束Session-Cookie也就随着消失了,而Persistent-Cookie只是存在于客户端硬盘上的一段文本(一般是加密的),并且可能会遭到Cookie欺骗以及针对Cookie的跨站脚本攻击,天然不如Session-Cookie安全了。

     一般Session-Cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的SessionID,这样咱们信息共享的目的就达不到了,此时咱们能够先把SessionID保存在Persistent-Cookie中,而后在新窗口中读出来,就能够获得上一个窗口SessionID了,这样经过Session-CookiePersistent-Cookie的结合咱们就实现了跨窗口的Session-Tracking(会话跟踪)。

     在一些Web开发的书中,每每只是简单的把Session和Cookie做为两种并列的Http传送信息的方式,Session-Cookie位于服务器端,Persistent-Cookie位于客户端,但是Session又是以Cookie为基础的。

     Session的关键特性:

          1)Session用来保存每个用户的专有信息;

          2)Session的生存期是用户持续请求时间加生存时间;

          3)Session信息是保存在应用服务器内存中,保存数据量可大可小;

          4)用户中止使用应用程序以后,Session仍在内存中停留一段时间,所以这种方法效率较低;

          5)相较与在数据库中存储和检索信息相比,它的执行速度会更快;

          6)Session应用于单个用户以其相应会话状态。所以,适合存储随用户的变化而变化的经常使用数据,或存储关于用户的安全数据;

          7)Session不会发生客户端与服务器端数据传输;

          8)会话相关;

          9)在会话的整个生存期中,不会被主动丢弃;

          10)数据不被序列化;

     3、Cache

     Cache存储于服务器的内存中,容许您自定义如何缓存数据项,以及缓存多长时间。当系统缺少内存时,缓存会自动移除不多使用的或优先级较低的缓存项,以释放内存,此过程称为清理。这是缓存为了确保过时数据再也不占用宝贵的服务器资源的方式之一。它不与会话相关,因此它是多会话共享的,所以缓存能够提升系统性能。同时有可能会泄露用户信息,另外在获取数据时还须要检测该缓存项是否还存在。

     Cache的关键特性:

          1)Cache用于在Http请求期间保存页面或者数据;

          2)Cache的使用能够大大提升整个系统的效率;

          3)因为Cache的使用是将频繁访问的数据放在内存中,当用户发出相同的请求后,服务器不会再次处理,而是直接缓存结果返回给用户。因此,Cache节省的是服务器处理时间

          4)对于缓存与应用程序在一块儿的状况,当应用程序重启将从新建立其实例;

          5)与会话无关

          6)根据服务器资源的情况,缓存项随时可能被丢弃;

          7)数据不被序列化;

          8)Cache不会发生客户端与服务器端数据传输;

     4、总结

     一、因为Session依赖于客户端Cookie(SessionID是存放于Cookie中的),所以不支持Cookie的浏览器,Session也会丢失,固然能够用Session Url重写来解决此问题。

     二、Cookie不建议存放大数据量(如存一个表格数据等),由于Cookie的值在每次Web页面请求往返的过程当中都是要附在Http头中的,若是太大会占用客户端与服务器端之间的带宽,若是多个链接访问就是N*4KB,当用户多了,就会成为瓶颈之一。

     三、Cache也要占用服务器的内存,可是比Session要多一些灵活性,但要注意哪些数据须要缓存,哪些本就不须要缓存。

     四、针对用Cache替换Session,对于单一系统来讲,是彻底不须要注意什么的。如果针对单点登陆来讲,同一帐号能够访问几个系统。或者在同一电脑中在不一样的页面中访问不一样的系统,那在作Cache数据保存时,应该根据不一样的系统惟一标识来保存针对不一样系统数据的缓存,以达SessionID的做用(固然还有其余实现方案)。不然,对于前面登陆的系统,在Cache中永远是最后一个系统的缓存数据,当刷新前面系统时,始终展示的是最后一个系统的操做。

     五、固然,session也能够不以cache的形式进行处理,由于像redis,memacache中有专门针对session共享的解决方案。

相关文章
相关标签/搜索