cache、session、cookie的区别

session把数据保存在服务器端,每一个用户都有属于自己的Session,与别人的不冲突 就是说,你登陆系统后,你的信息(如账号、密码等)就会被保存在服务器上一个单独的session中,当你退出系统后服务器就会丢掉这个session,你的数据也就没了,必须再次登陆,如果登陆超时也会被丢掉,要看人家系统是怎么设置的了。

Cookie同session一样是保存你个人信息的,不过是保存在客户端,也就是你使用的电脑上,并且不会被丢掉,除非你删除浏览器Cookie。

Cache是保存系统上的信息的,因为从Cache中读数据比较快,有些系统(网站)会把一些经常被使用的数据放到Cache里,提高访问速度,优化系统性能

session和cookie是面向单个用户的,cache是面向的是所有用户。
C#缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能。

Cache的概述

Cache 即高速缓存。那么cache是怎么样提高系统性能与运行速度呢?是不是在任何情况下用cache都能提高性能?是不是cache用的越多就越好呢?

  1、Cache 是分配在服务器上的一个公共的内存片。
  所谓公共指的cache只要一创建是任何一个客户端浏览器都可以通过后台代码访问到它,它面向的是所有用户,相对而言session也是服务器上的一 段内存,但他面向的是单个用户。它是服务器的一段内存块,也就是说每个cache一经创建就占用了服务器资源的。所以从这点来说我们就可以说:并不是 cache越多越好。  
  2、cache 是有时间限制的,超过了服务器设定的过期时间,它就会被服务器回收。当cache被回收后对应的内存块就会被清空,再次通过cache[“cachekey”]访问对象时返回的就是null值。
  3、cache 可以存放任何对象

4、Cache支持装箱/拆箱操作。

如你可以把一个DataSet对象ds通过Cache.Insert(“dsCache”,ds)的方式存到Cache中,可以通过拆箱操作 DataSet ds = (DataSet)Cache[“dsCache”]来访问它。

5、Cache 一般用于数据较固定,用的较频繁的地方。

web站点中缓存的重要性毋庸置疑。我想很多.net开发人员在开发web应用系统的时候优先考虑使用的缓存并不是第三方缓存解决方案(比如 分布式缓存memcached、Redis等等),而应该是.net framework已经提供的多种缓存解决方案。下面谈谈对.net framework中缓存的认识。

1、System.Web.Caching.Cache  

  估计大部分做过asp.net开发的人都用过这个命名空间下的缓存,我们可以直接使用HttpContext.Current.Cache实例而不 用实例化。当然这个命名空间下的Cache类是允许您实例化的,需要定制自己的缓存系统的当然可以完全自己控制如何初始化这个类。我在园子里看到过有很多 文章介绍Cache的CRUD辅助类库大多数都是针对System.Web.Caching.Cache。需要说明的是,我们还可以通过该命名空间下的HttpRuntime.Cache实现web、控制台、winform等不同表现形式下的缓存,而且 完全无需自己实例化。HttpRuntime.Cache是之前个人开发中使用比较多的一个类,现在比较偏爱.net framework4.0中的增强型的缓存类MemoryCache。

2、Output Cache

  众所周知,输出缓存主要分页面输出缓存和页面部分缓存。说白了,就是缓存整个页面的html或者部分html,没什么值得讨论的。
3、System.Runtime.Caching
  现在开发中使用最多的类MemoryCache出自这个命名空间,使用前需要引用using System.Runtime.Caching。MemoryCache继承自ObjectCache, IEnumerable, IDisposable,其中ObjectCache是个抽象类。用过MemoryCache的人都知道,这个MemoryCache有一个属性叫 Default,通常可以像下面这样使用:private static ObjectCache memCache = MemoryCache.Default;

当然我们也完全可以通过public MemoryCache(string name, NameValueCollection config = null)构造函数初始化缓存对象。

Session的概述

  session存放在哪里:服务器端的内存中。不过session可以通过特殊的方式做持久化管理(memcache,redis)。

  session的id是从哪里来的,sessionID是如何使用的:当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象

  浏览器第一次请求服务器时,服务器会生成一个sessionId,并返回给浏览器,这个sessionId会被保存在浏览器的会话cookie中。如下图

在浏览器不关闭的情况下,之后的每次请求请求头都会携带这个sessionId到服务器。如下图

【关闭浏览器,session会改变】

session在服务器的默认有效时间是30分钟,可以通过3种方式去设置session的过期时间(具体那三种可以百度),下面通过代码的方式设置session过期时间为180秒

request.getSession().setMaxInactiveInterval(30*6);

通过sessionId我们可以做登陆过期,会话期间无需二次登陆等功能。

使用:Asp.Mvc  控制器中 ViewBag.sessionID=Controller.Session.SessionID

问题:页面刷新SessionID总是变化

  在Asp.net站点中,刷新页面 SessionID 变化,在网站中加入 Global.asax ,并添加以下代码。

 protected void Session_Start(object sender, EventArgs e)
{ }
protected void Session_End(object sender, EventArgs e)
{ }

因为在一个没有使用Session的Web项目中,默认是无会话访问。即会话不会保持,Cookies中也不会保存SessionID。

要么使用Session,要么添加Global.asax 文件,会话就会开启

cache、session与cookie的更多相关文章

  1. Session、Cookie、Cache、Token分别是什么及区别

    一.Session 1 )Session 解释 Session 是单用户的会话状态.当用户访问网站时,产生一个 sessionid.并存在于 cookies中.每次向服务器请求时,发送这个 cooki ...

  2. session 和 cookie 的区别与联系

    1.创建一个新的Cookie Cookie cookie = new Cookie("username",name); 2.设置cookie在客户端上存活多久 cookie.set ...

  3. Session和Cookie深度剖析

    Session和Cookie的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于采用服务器端保持状态的方案在客户端 ...

  4. python运维开发(十九)----Django后台表单验证、session、cookie、model操作

    内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...

  5. 浅析Django之session与cookie

    浅析Django之session与cookie 1 session与cookie概述 原理: 由于HTTP协议是无状态,无连接的,当用户发起网路请求时,需要服务端能标识用户ID,用以存储用户相关信息, ...

  6. SESSION和cookie的使用和区别

    PHP中SESSION和cookie的使用和区别 cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制. PHP在http协议的头信息里发送cookie, 因此 setcookie( ...

  7. session 和cookie

    (1)cookie与session---------->>>>>>>>>>>>>>>>>>& ...

  8. PHP——注册页面,审核页面,登录页面:加Session和Cookie

    实现效果: 用户注册信息,管理员核对信息审核通过后,可实现注册的用户名和密码的成功登陆,利用session和cookie获取用户信息并且不能跳过登录页面直接进入主页面 1.Session存储在服务器可 ...

  9. PHP处理会话函数session和cookie总结

    本教程讲解PHP处理会话函数session和cookie总结 PHP处理会话函数包括:session_start.session_register.session_is_registered.sess ...

随机推荐

  1. Vue.js 渲染函数, JSX(未掌握,未学完)

    渲染函数 , JSX(没完成学习) 基础: 实例属性:vm.$slots default 属性包括了所有没有被包含在具名插槽中的节点. 渲染函数: render: function(createEle ...

  2. (GoRails )使用Vue.js制作拖拉list功能(v1-4) gem 'acts_as_list'(自动排列顺序)

    系列视频: use Vue.js to build the drag and drop support for the list themselves the cards that are under ...

  3. Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载

    随着 Google 推出了全新的设计语言 Material Design,还迎来了新的 Android 支持库 v7,其中就包含了 Material Design 设计语言中关于 Card 卡片概念的 ...

  4. Clear The Matrix CodeForces - 903F (状压)

    大意: 给定4行的棋盘以及4种大小的正方形方块, 每种各有一定花费, 每次可以选一种方块放在棋盘上, 棋盘对应格子全变为'.', 求最少花费使得棋盘全部变成'.' 状压基本操作练习, 状态取12位, ...

  5. Codeword CodeForces - 666C (字符串计数)

    链接 大意:求只含小写字母, 长度为n, 且可以与给定模板串匹配的字符串个数 (多组数据) 记模板串为P, 长为x, 总串为S. 设$f_i$为S为i时的匹配数, 考虑P最后一位的首次匹配位置. 若为 ...

  6. nyoj 1237 简单dfs

    最大岛屿 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己 ...

  7. vim 缩进设置

    1.在自己的家目录(/home)下建立.vimrc文件.控制台输入vi ~/.vimrc 回车. 2.在.vimrc文件中输入如下文本: set tabstop=4 set softtabstop= ...

  8. zabbix LLD 自定义脚本

    一 前言 二 懒人必备zabbix监控之 LLD (low level discovery) 本次的教程是我想监控kafka的消费情况,举个栗子 [root@VM_0_98_centos bin]# ...

  9. JavaScript运算符:递增递减运算符前置和后置的区别

    从两段代码说起 var num1 = 2; var num2 = 20; var num3 = --num1 + num2; var num4 = num1 + num2; console.log(n ...

  10. sql server中如何将两个字段数据合并成一个字段显示(字段与字段添加特殊符号)

    之前,我在做统计数据时,需要一个字段显示某月的订单数量和订单金额,要求组合成一个字段,用括号组合. 统计出来的结果大概是这样的,首先我们来创建一些模拟数据 ---创建订单表--- create tab ...