Session—管理用户会话状态

什么是状态管理?

指对同一页或不同页的多个请求维护状态和页信息的过程

为什么要进行状态管理?

Web页是无状态的,不保存任何用户请求信息,而且到服务器的每一往返过程都将销毁并重新创建页,所以超出单个页的生命周期之后,页信息将不存在。

状态管理的作用

指示用户信息

使得页与页之间、请求与请求之间能够共享信息

更为快速的数据存储和读取

  • 从一个客户到达某个网页开始,到其离开该网页为止的这段时间内,服务器会为该用户分配一个Session,以保存该用户会话时所需要的信息
  • 当用户在页面之间切换时,存储在Session对象中的变量不会被清除,当客户访问网页时,这些变量会一直存在
  • Session状态使用的范围:使用同一个客户端(浏览器实例)访问同一个应用程序的所有页面。
  • 虽然Session的大小没有限制,但是我们千万不能滥用Session。推荐在Session中存储少于100K的数据。
  • Session是在用户第一次访问网站的时候创建的,那么Session是什么时候销毁的呢?
  1. 默认情况下,Session的超时时间(Timeout)是20分钟,用户保持连续20分钟不访问网站,则Session被收回,如果在这20分钟内用户又访问了一次页面,那么20分钟重新计时

mode状态模式

  1. 对于会话状态存储器,ASP.NET提供了3个选项,通过模式设置和相关的属性对其进行配置:

    =”[Off|InProc|StateServer|SQLServer] ”

    •InProc(默认):Session存储在IIS进程中(Web服务器内存)
    •StateServer:Session存储在独立的Windows服务进程中(可以不是Web服务器)
    •SqlServer:Session存储在SqlServer数据库的表中(SqlServer服务器)

    InProc模式速度比较快,但是每次重新启动IIS都会导致Session丢失。利用后两种模式,只能保存序列化的对象,但我们可以把Session从Web服务器中独立出来,从而减轻Web服务器的压力,同时减少Session丢失的概率。 三种模式的Session比较

三种模式的Session比较

 

InProc

StateServer

SQLServer

存储物理位置

IIS进程(内存)

Windows服务进程(内存)

SQLServer数据库(磁盘)

存储类型限制

无限制

可以序列化的类型

可以序列化的类型

使用范围

当前请求上下文,对于每个用户独立

生命周期

第一次访问网站的时候创建Session超时后销毁

优点

性能比较高

Session不依赖Web服务器,不容易丢失

缺点

容易丢失

序列化与反序列化消耗CPU资源

序列化与反序列化消耗CPU资源,从磁盘读取Session比较慢

使用原则

不要存放大量数据

   

  

Cookie

定义:

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie).当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookies 会帮你在网站上所打的文字或是一些选择都记录下来。当下次你再访问同一个网站,Web服务器会先看看有没有它上次留下的Cookies资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。

作用:

服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。

  • Cookie可分为两类:会话Cookie持久性Cookie。
  • 在浏览器的处理过程中保留的Cookie称为会话Cookie,这种Cookie是暂时性的,当关闭浏览器后,任何会话Cookie都会丢失。持久性Cookie可以保存几个月甚至几年。
  • 每个 Cookie 必须有一个唯一的名称,以便以后从浏览器读取 Cookie 时可以识别它。由于 Cookie 按名称存储,因此用相同的名称命名两个 Cookie 会导致其中一个 Cookie 被覆盖。
  • 一小段保存在客户端的数据,位于<Windows安装盘>:\Documents and Settings\<用户名>\Cookies
  • 用户每次访问网站页面的时候,浏览器会根据网站的URL在本地Cookies文件夹内查找是否存在当前网站关联的Cookie,如有就连同页面请求一起发送到服务器
  • 大多数浏览器规定Cookie大小不超过4K,每个站点能保存的Cookie不超过20个,所有站点的Cookie总数不超过300个;
  • 只能存储字符串;
  • 安全性差,不要保存保密信息,如用户名、密码、信用卡号等。建议敏感数据(如验证码)加密后存储。

保存

HttpCookie cookieValCode = new HttpCookie("ValCode", strValCode);

cookieValCode.Expires = DateTime.Now.AddMinutes(10);

Response.Cookies.Add(cookieValCode);

读取

Request.Cookies["ValCode"].Value

删除(过期时间设置为过去的时间)

HttpCookie cookieValCode = Request.Cookies["ValCode"];

cookieValCode.Expires = DateTime.Now.AddMinutes(-1);

Response.Cookies.Add(cookieValCode);

Cache—高速缓存

  • 存储的物理位置。服务器内存。
  • 存储的类型限制。任意类型。
  • 状态使用的范围。当前请求上下文,所有用户共用一份。
  • 存储的大小限制。任意大小。
  • 生命周期。有多种过期策略控制缓存的销毁。
  • 安全与性能。数据总是存储在服务端,安全性比较高,但不易存储过多数据。
  • 优缺点与注意事项。检索数据速度快,过期策略丰富。注意不要把对实时性要求很高的数据放到Cache中,不断更新Cache会对数据库造成压力。

ASP.Net Session, Cookie, Cache的区别的更多相关文章

  1. 关于session,cookie,Cache

    昨天看了<ASP.NET 页面之间传值的几种方式>之后,对session,cookie,Cache有了更近一步的了解,以下是相关的内容 一.Session 1.Session基本操作 a. ...

  2. Session和Cache的区别

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

  3. 浅谈Cookie、Session与Cache的区别

    以前实现数据的缓存有多种方法,如客户端的Cookie,服务器端的Session.Application. 一.Cookie Cookie是保存客户端的一组数据,主要用来保存用户的个人信息,主要存放浏览 ...

  4. 【转】Session Cookie Token的区别

    Cookie cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保 ...

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

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

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

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

  7. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)

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

  8. [区别]APPlication,Session,Cookie,ViewState和Cache

    原文发布时间为:2009-08-01 -- 来源于本人的百度文章 [由搬家工具导入] 在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewS ...

  9. java基础之缓存:session、cookie和cache的区别

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

随机推荐

  1. Python3基础 in 列表名 判断一个元素是否在列表中

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  2. U9单据UI开发--单据类型UI开发

    1.在解决方案下新建UI界面项目,命名以UI作为后缀 2.先删除系统默认新建的UI界面数据模型,并新建界面数据 3.新建单据类型UIModel(界面数据),以model作为界面数据后缀名 4.修改单据 ...

  3. 单据BE构建

    本节来构建单据BE1.新建单据BE实体项目,修改命名空间 2.引入单据基类如下图所示,在UFIDA.U9.Base.BaseBE.MetaData命名空间下将类Doc托至设计BE视图中 3.分别托2个 ...

  4. PHP文本框的值随下拉框改变

    初学PHP,下面是实现文本框内容随下拉框变化的代码实现: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  5. mysql简介

    1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数 ...

  6. 2-c语言作业

    #include<stdio.h> #include<math.h> int main(void) { int money,year; double rate,sum; pri ...

  7. Caché数据库学习笔记(2)

    目录: 创建新类(表)(class文件)与创建routine(.mac  .inc) 在类里面添加函数(classmethod) Terminal的使用 ======================= ...

  8. python的类和对象——番外篇(类的静态字段)

    什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...

  9. 寻找C语言和.NET之间的桥梁

    一提到C语言,在偶这个始终的C语言菜鸟眼里,是个神奇的语言.经过了近半世纪的历史,多少技术湮灭在信息时代的长河中,C语言却依然在TIBOE排行榜中笑傲群雄. 本文是谈.NET开发者看来,C语言有什么特 ...

  10. linux 下mysql的启动 、调试、排错

    Linux 下 MySQL 启动与关闭 说明 一.启动 1.1  MySQL 进程 可以用ps 命令查看进程: [root@rac2 ~]# ps -ef|grep mysql root     21 ...