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. Redis之无序集合类型命令

    Redis 集合(Set) Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找 ...

  2. eclipse wtp 没有自动生成 web.xml

    因此,运行servlet 时出错了. 网上查了一下,好像说确实不会自动生成,但是运行应该没有问题的. 幸亏找到了手动生成web.xml的方法,也就不纠结了. http://crunchify.com/ ...

  3. rsync+inotify文件同步 - 同步慢的问题

    rsync+inotify文件同步 - 同步慢的问题 我们来看网上的教程,我加了注释.(网上所有的教程基本都一模一样,尽管写法不一样,致命点都是一样的) #!/bin/bash /usr/bin/in ...

  4. [Java学习] Java类的基本运行顺序

    我们以下面的类来说明一个基本的 Java 类的运行顺序: 1. public class Demo{ 2. private String name; 3. private int age; 4. 5. ...

  5. English trip M1 - PC12 I'd Like a Room Please Teacher:Taalan

    In this lesson you will learn to say what you need. 在本课中,您将学习如何说出您的需求. Words list elevator  电梯      ...

  6. HDU-4471 Yet Another Multiple Problem (BFS+路径还原)

    Problem Description There are tons of problems about integer multiples. Despite the fact that the to ...

  7. Leetcode 90

    // 重复元素在去重的时候会出现顺序不同去不了重,这时候需要对add进行排序class Solution { public: vector<vector<int>> subse ...

  8. JavaWeb重定向和转发

    if (user != null && passWord.equals(user.getPassWord())) { // 登录成功 // response.sendRedirect( ...

  9. 部署docker-registry私有仓库

    部署docker-registry私有仓库 创建文件夹 sudo mkdir -p /var/docker-data/{registry,certs,auth} ​ sudo openssl req ...

  10. memory prefix vice ,with out 1

    1● vice 副的   2● with 向后,相反