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

文章来源:http://canann.iteye.com/blog/1941173

以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application

其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息。

Session则保存对话信息。Application则是保存在整个应用程序范围内的信息,相当于全局变量。

Session

Session用来保存每一个用户的专有信息

Session的生存期是用户持续请求时间加上一段时间(一般是20分钟左右)

Session信息是保存在Web服务器内存中的,保存数据量可大可小
由于用户停止使用应用程序之后它仍在内存中存留一段时间,因此这种方法效率较低

代码:

Session[“UserID”]=”test”;
String UserName=Session[“UserID”].ToString();

Cookie

Cookie用来保存客户浏览器请求服务器页面的请求信息

我们可以存放非敏感的用户信息,保存时间可以根据需要设置

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

Cookie对象的Expires属性设置为MinValue表示永不过期

Cookie存储的数据量受限制,大多数的浏览器为4K因此不要存放大数据

由于并非所有的浏览器都支持Cookie,数据将以明文的形式保存在客户端

代码:

Resopnse.Cookies[“UserID”]=”test”;
String UserName= Resopnse.Cookies [“UserID”].ToString();

Cache

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

Cache的使用可以大大的提高整个应用程序的效率

它允许将频繁访问的服务器资源存储在内存中,当用户发出相同的请求后,服务器不是再次处理而是将Cache中保存的数据直接返回给用户

可以看出Cache节省的是时间—服务器处理时间

Cache实例是每一个应用程序专有的,其生命周期==该应用程序周期

应用程序重启将重新创建其实例

注意:如果要使用缓存的清理、到期管理、依赖项等功能必须使用Insert 或者Add方法方法添加信息

代码:

Cache[”ID”]=”cc”;或者Cache.Insert(“ID”,”test”);
String ID =Cache[“ID”].ToString();

通常使用最频繁的是Session,那么Session和Cache又有什么区别呢?

Session缓存和Cache缓存的区别。

(1)最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效。

(2)即使应用程序终止,只要Cache.Add方法中定义的缓存时间未过期,下次开启应用程序时,缓存的数据依然存在。而Session缓存只是存在于一次会话中,会话结束后,数据也就失效了。

(3)Session容易丢失,导致数据的不确定性,而Cache不会出现这种情况。

(4)由于Session是每次会话就被加载,所以不适宜存放大量信息,否则会导致服务器的性能降低。而Cache则主要用来保存大容量信息,如数据库中的多个表。

(5)Session目前只能保存在内存中,对其性能有影响。

Session:为当前用户会话提供信息。还提供对可用于存储信息的会话范围的缓存的访问,以及控制如何管理会话的方法。它存储在服务器的内存中,因此与在数据库中存储和检索信息相比,它的执行速度更快。与不特定于单个用户会话的应用程 序状态不同,会话状态应用于单个的用户和会话。因此,应用程序状态非常适合存储那些数量少、随用户的变化而变化的常用数据。而且由于其不发生服务器-客户 端数据传输,Session还适合存储关于用户的安全数据,如购物车信息。

Session的关键特性有:存储于服务器内存中,与会话相关,在会话的整个生存期中存在即不会被主动丢弃,不被序列化,不发生服务器-客户端数据传输。
      Cache:它存储于 服务器的内存中,允许您自定义如何缓存项以及将它们缓存多长时间。例如,当缺乏系统内存时,缓存会自动移除很少使用的或优先级较低的项以释放内存。该技术 也称为清理,这是缓存确保过期数据不使用宝贵的服务器资源的方式之一。它不与会话相关,所以它是多会话共享的,因此使用它可以提高网站性能,但是可能泄露 用户的安全信息,还由于在服务器缺乏内存时可能会自动移除Cache因此需要在每次获取数据时检测该Cache项是否还存在。

Cache的关键特性有:存储于服务器内存中,与会话无关,根据服务器内存资源的状况随时可能被丢弃,不被序列化,不发生服务器-客户端数据传输。

Cookie:Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法。例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息。当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息。在开发人员以编程方式设置Cookie时,需要将自己希望保 存的数据序列化为字符串(并且要注意,很多浏览器对Cookie有4096字节的限制)然后进行设置。

Cookie的关键特性有:存储于客户端硬盘上,与用户相关,在一定时间内持久化存储,可以跨浏览器共享数据,需要被序列化,发生服务器-客户端数据传输。

下面这个问题很有启发性:

最近小组的同事很喜欢用Session做页面跳转,具体就是在查询页面把查询结果放到DataTable中,用Session存储这个dataTable,读取到数据之后再子页面做Session清除,这样对性能有没有什么影响?

1、session:session的确是存放在服务器的内存中(但不是4k上限,具体大小限制应该是服务器内存),而且同一个sessionid的多个 http请求会排队,也就是session对于同一个浏览器来说是同步的,用不好会极大影响性能。另外,session依赖于客户端cookie,因为 sessionid是存放在客户端浏览器进程cookie中的,因此不支持cookie的浏览器,session也会丢失(session url重写可部分解决这个问题,可参考:http://www.sungness.com/archives/48)。因此不建议用。

2、cookie,也不建议存放datatable这样的“大数据”。因为cookie不仅有4k上限,并且不是“纯存放在客户端”这么简单,要知道 cookie的值在每次web页面请求往返的过程中都是要附带在http头中的,如果太大会占用服务器和客户端之间的网络带宽(虽然只是4k,但在线人多 了可就是4k * n了)。对于b/s结构的应用来说,网络带宽是性能最主要的瓶颈之一!另外,对于datatbale转换成json字符串再存入 cookie,服务器CPU也会消耗。最可怕的是,一但你的cookie忘记删除了,那么在其有效期和作用域内,用户访问你的所有页面时都将携带这个4K 大小的http头,那就悲剧了。10000在线人数,4千兆网卡也不够你花的。

3、数据库连接,每次保存查询语句然后再查询的方式不错,不过看你的查询复杂度了,如果很费时的查询,这样调用也是不可取的。内存和cpu的矛盾你要根据 实际情况作出选择。对于具有连接池的应用来说,一次连接数据的成本并不高,经过测试差不多=10次调用取当前系统时间函数。但查询语句的复杂度就没谱了。 另外,如果并发人数很多的情况下,频繁占用数据库连接,会导致连接池没有可用连接了,那就又悲剧了。此时就不是一次连接的成本,系统整体性能将毁灭性的下 降,反应迟钝。

4、cache:一个不错的选择,不过它可同样是占用服务器内存哦,只是比session多了一些灵活性。不过我也不建议你用于存放传递参数的地方。要知 道session就算内存满了也不会丢失你的参数值(会抛异常),可cache可不是,它会直接删掉你的参数值,甚至内存极度不足时都不会让你进去(也不 会报错)。换句话说,可能上一行代码刚存进去,下一行代码去读就丢了。很可怕吧~

5、form表单:最为提倡的方式,http协议中原本页面间传值的方法就是这样的,只是有时不太方便,能用之则用之。

6、自定义存储机制:如果你对性能要求很苛刻,或者非要精益求精的话。那么还是自己写一个存储机制吧。例如我自己就是写了自己的XSession对象,它 的用法与session使用类似,但是存储机制都是我自己封装的,既有cache的优点、又有session的优点,还有数据库的优点、性能看你写的算法 了、而且具有更大的使用灵活性。缺点就是需要你自己coding...

时间: 2024-10-07 23:10:50

关于缓存中Cookie,Session,Cache的使用的相关文章

Django中的session的使用

一.Session 的概念 cookie 是在浏览器端保存键值对数据,而 session 是在服务器端保存键值对数据 session 的使用依赖 cookie:在使用 Session 后,会在 Cookie 中存储一个 sessionid 的数据,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到 sessionid 后,会根据这个值找出这个请求者的 Session. 二.Django 中 Session 的存储 session 键值对数据保存 session 的键值对数据默认保存在 dj

Redis+Django(Session,Cookie、Cache)的用户系统

转自 http://www.cnblogs.com/BeginMan/p/3890761.html 一.Django authentication django authentication 提供了一个便利的user api接口,无论在py中 request.user,参见 Request and response objects .还是模板中的 {{user}} 都能随时随地使用,如果从web开发角度来看,其实无非就是cookie与session的运用. 在项目首页,在登陆和注销状态下分别输出

Django中Cookie和Session的基本配置以及设置

Cookie 1.获取Cookie: request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) 参数: default: 默认值 salt: 加密盐 max_age: 后台控制过期时间 2.设置Cookie: rep = HttpResponse(...) 或 rep = render(request, ...) rep.set_cookie(key,valu

Django中的session和cookie

session和cookie 一. 概念理解 你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接.这是因为 你浏览某个网页的时候,WEB 服务器会先送一些资料放在你的计算机上,类似于你打的文字,选的一些东西什么的,Cookie 会帮你都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内

{Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请

PHP 中cookie 和 session 的分析

1. PHP 的COOKIE cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制.     PHP 在http 协议的头信息里发送cookie,因此  setcookie()     函数必须在其它信息被输出到浏览器 前调用,这和对  header()    函数的限制类似. 1.1 设置cookie: 可以用 setcookie()或 setrawcookie()函数来设置 cookie.也可以通过向客户端直接发送http  头来 设置.     1.1.1  使用 set

session保存至缓存中

原理 session实际上是把session 保存在了cookie中,用户每次访问都发送sessionid给服务器,服务器根据sessionid取用户数据 1把session保存到缓存服务器中 namespace XFT.Service { /// <summary> ///用户状态管理 /// </summary> public class Session { private HttpContextBase context; public const string Session

Http中Cookie和Session介绍

先介绍下B/S系统的工作的完整过程.首先客户端的浏览器发出请求,服务端的webserver接受到请求后,调用相关请求的页面进行处理,处理完后将结果发送给客户端的浏览器进行显示.只能是浏览器向webserver发送请求,webserver响应请求,而webserver不会主动的向客户端发送信息.因为它不知道向谁发送哪些信息.把服务端比喻成一个矜持的小姑娘,你问她要什么她才会回答什么.浏览器与webserver的交互是暂时的,当请求响应的过程完毕后,这种连接也随之结束.换句话说webserver根本

PHP中Cookie与Session的异同以及使用

Cookie与Session的异同: 一.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范.网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies . 具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户