浅谈Cookie、Session与Cache的区别
以前实现数据的缓存有多种方法,如客户端的Cookie,服务器端的Session、Application。
一、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的区别的更多相关文章
- 浅谈cookie,sessionStorage和localStorage区别
在客户端存储数据可以使用的技术有如下四种: Cookie技术:浏览器兼容性好,但操作比较复杂,需要程序员自己封装,源生的Cookie接口不友好 H5 WebStorage:不能超过8MB,操作简单: ...
- 浅谈cookie 和session 的区别
具体来说 cookie 是保存在“客户端”的,而session是保存在“服务端”的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域: 如果cooki ...
- c# Cookie,Session,Application,Cache 四种缓存使用情景
好记性不如烂笔头,记录一下C#缓存使用的情景模式....个人理解,不正之处,欢迎指正 讨论 Cookie,Session,Application,Cache 四种,有的缓存情景对人,有的缓存情景对事儿 ...
- 浅谈数据库系统中的cache(转)
http://www.cnblogs.com/benshan/archive/2013/05/26/3099719.html 浅谈数据库系统中的cache(转) Cache和Buffer是两个不同 ...
- 浅谈cookie 和 session
一. cookie 定义:保存在浏览器本地上的一组组键值对 特点: 由服务器让浏览器进行设置的 浏览器保存在浏览器本地 下次访问时自动携带 应用: 登录 保存浏览习惯 简单的投票 使用cookie的原 ...
- Session和Cache的区别
以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application.其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息.Session则保存 ...
- (进阶篇)浅谈COOKIE和SESSION关系和区别
COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...
- 浅谈cookie与session的区别
cookie用的是在客户端保持状态的方案(它是在用户端的会话状态的存贮机制),前端也可以来设置他 所有浏览器都识别,并且会缓存在浏览器中. cookie是以key=value这种键值对的形式保存,每个 ...
- 浅谈 cookie 和 session
1.关闭浏览器后,session是否还存在? session在服务器和客户端各保留一个副本,关闭浏览器与否和session是否存在没有任何关系. session采取的是服务器端保持状态的方案,它存储在 ...
随机推荐
- LOJ#3086. 「GXOI / GZOI2019」逼死强迫症(矩阵快速幂)
题面 传送门 题解 先考虑全都放\(1\times 2\)的方块的方案,设防\(i\)列的方案数为\(g_i\),容易推出\(g_i=g_{i-1}+g_{i-2}\),边界条件为\(g_0=g_1= ...
- 日志分析与splunk浅谈
难易程度:★★★ 阅读点:linux;python;web安全;日志分析; 文章作者:xiaoye 文章来源:i春秋 关键字:网络渗透技术 前言 linux下的日志分析对企业来说非常重要,对我们分析p ...
- PHP开发接口,封装方法
接口的主要功能是从服务器端获取数据,然后渲染到客户端 其主要的实现流程一般会经历这样的几个阶段服务器端----> 数据库|缓存 ----> 调用接口 ---->客户端 在接口数据传输 ...
- VmWare扩展硬盘分区
扩展硬盘 对硬盘进行分区 () 查看现有的硬盘分区情况 [mysql@china ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/m ...
- javascript中创建对象的几种不同方法
javascript中创建对象的几种不同方法 方法一:最直白的方式:字面量模式创建 <script> var person={ name:"小明", age:20, s ...
- 【8】JMicro微服务-JMicro ZKUI
ZKUI是一个开源项目,是一个查看,修改ZK数据非常方便的工具.JMicro基于ZK做服务治理,配置管理,因此使用ZKUI会提供非常大的方便. Github地址:https://github.com/ ...
- vue、react、angular三大框架对比 && 与jQuery的对比
前端当前最火的三大框架当属vue.react以及angular了. 但是在做项目的时候,我们怎么去选择呢? 这里做一个比较,希望大家可以有一个比较清晰的认识. vue与react vue和react ...
- (转)linux内核调优参数对比和解释
[net] ######################## cat /proc/sys/net/ipv4/tcp_syncookies # 默认值:1 # 作用:是否打开SYN Cookie功能,该 ...
- mongodb-分组分页
1, 添加测试数据 @Test public void save() { News n = null; ; i < ; i++) { n = new News(); n.setTitle(&qu ...
- 外网访问不了Xampp(本地访问不了虚拟机的Xampp)
安装好了Xampp,在虚拟机是可以访问的, 浏览器中输入localhost 嘛 不过在本地就是访问不了,ping是能通过的 然后网上查了一些资料,并结合Xampp的提示: 特别注意:如果连上面这 ...