一、Cookie

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

1、保存时间可以根据需要进行设置:

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

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

2、Cookie存储的数据量受限制,大多数的浏览器约束为4KB左右,所以不要存放太大数据。

3、Cookie的关键特性:

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

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

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

4)可以跨浏览器共享数据;

5)数据需要被序列化;

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

7)用户相关;

二、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-Cookie和Session-Cookie的区别了,关于两者安全性的讨论也就一目了然了,Session-Cookie针对某一次会话而言,会话结束Session-Cookie也就随着消失了,而Persistent-Cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到Cookie欺骗以及针对Cookie的跨站脚本攻击,自然不如Session-Cookie安全了。

通常Session-Cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的SessionID,这样我们信息共享的目的就达不到了,此时我们可以先把SessionID保存在Persistent-Cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过Session-Cookie和Persistent-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)数据不被序列化;

三、Cache

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

Cache的关键特性:

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

2)Cache的使用可以大大提高整个系统的效率;

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

4)对于缓存与应用程序在一起的情况,当应用程序重启将重新创建其实例;

5)与会话无关

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

7)数据不被序列化;

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

四、总结

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

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

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

4、针对用Cache替换Session,对于单一系统来说,是完全不需要注意什么的。若是针对单点登录来说,同一账号可以访问几个系统。或者在同一电脑中在不同的页面中访问不同的系统,那在做Cache数据保存时,应该根据不同的系统唯一标识来保存针对不同系统数据的缓存,以达SessionID的作用(当然还有其他实现方案)。否则,对于前面登录的系统,在Cache中永远是最后一个系统的缓存数据,当刷新前面系统时,始终展现的是最后一个系统的操作。

5、当然,session也可以不以cache的形式进行处理,因为像redis,memacache中有专门针对session共享的解决方案。

Cookie、Session和Cache的更多相关文章

  1. c# Cookie,Session,Application,Cache 四种缓存使用情景

    好记性不如烂笔头,记录一下C#缓存使用的情景模式....个人理解,不正之处,欢迎指正 讨论 Cookie,Session,Application,Cache 四种,有的缓存情景对人,有的缓存情景对事儿 ...

  2. 关于缓存中Cookie,Session,Cache的使用

    文章来源:http://canann.iteye.com/blog/1941173 以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application. 其中C ...

  3. Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别

    2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...

  4. Application,Session,Cookie,ViewState和Cache区别

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...

  5. Cookie Session Cache

    二. 工作机制 Ø Cookie :采用的是客户端保存信息的方案. Ø Session :采用服务器端保存信息的方案. Ø Cache :利用缓存 SRAM 来"静态"的保存写入信 ...

  6. cookie,,session,cache,static 浅谈笔记

    cookie:存在于客户端,每次请求伴随httpRequest 到达服务器端,Cookie内保存sessionId,服务器端就是根据Cookie中的SessionId找到用户的专有session , ...

  7. Session和Cache的区别

    以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application.其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息.Session则保存 ...

  8. Cookie Session和自定义分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  9. python Cookie Session 相关用法

    Cookie一.前言1.http协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响 应情况直接影响,也不会直接影响后面的请 ...

  10. django - 总结 - cookie|session

    Cookie是通过HTTP请求和响应头在客户端和服务器端传递的. 在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术. --------------------- ...

随机推荐

  1. Python3 urllib库和requests库

    1. Python3 使用urllib库请求网络 1.1 基于urllib库的GET请求 请求百度首页www.baidu.com ,不添加请求头信息: import urllib.requests d ...

  2. 2018.09.20 atcoder Building Cubes with AtCoDeer(枚举)

    传送门 有个十分显然的结论,只用枚举前后两个面就可以知道所有的面的颜色. 于是可以O(n2)O(n^2)O(n2)枚举前后两个面然后用map乱搞求贡献. 发现这样算出来会多算两倍(打表证明)于是答案除 ...

  3. 【Unity】1.1 安装Unity 5.3.4 开发环境

    分类:Unity.C#.VS2015 创建日期:2016-03-23 一.简介 Unity分个人版(Personal)和专业版(Pro).个人版是免费的(部分高级功能受限,但初学者也用不到它),Pro ...

  4. Linux将程序添加到服务的方法(通用)

    一:咱们通过这篇文章来演示怎么将某个程序作为服务(就类似Windows服务可以开机自动启动),这里以tomcat为例,已经亲测过: 二:步骤(最好用root用户来做这种事情,切换root用户记得su ...

  5. python 判断是否是空行或注释行

    #coding:utf-8 '''''cdays-4-exercise-6.py 文件基本操作 @note: 文件读取写入, 列表排序, 字符串操作 @see: 字符串各方法可参考hekp(str)或 ...

  6. 201709021工作日记--Volley源码解读(四)

    接着volley源码(三)继续,本来是准备写在(三)后面的,但是博客园太垃圾了,写了半天居然没保存上,要不是公司这个博客还没被限制登陆,鬼才用这个...真是垃圾 继续解读RequestQueue的源码 ...

  7. 3D indoor map positioning with a smartphone image

    menu 1. 基于Tango的三维建模技术(SLAM)(视觉SLAM,RGBD单目深度摄像机+罗盘仪)导出或不导出->Android 三维游戏开发技术(普通Android手机) 2. 基于An ...

  8. android2.1中<shape>圆角的bug

    android的兼容性真是一个不可忽略的问题,今天测试时发现使用xml定义Shape drawable在android 2.1上存在bug <SPANstyle="FONT-SIZE: ...

  9. delphi 动态加载dll

    引入文件 DLL比较复杂时,可以为它的声明专门创建一个引入单元,这会使该DLL变得更加容易维护和查看.引入单元的格式如下: unit MyDllImport; {Import unit for MyD ...

  10. xlsxwriter

    xlsxwriter是python中用来处理execl表格的库 参考