Session—管理用户会话状态
什么是状态管理?
指对同一页或不同页的多个请求维护状态和页信息的过程
为什么要进行状态管理?
Web页是无状态的,不保存任何用户请求信息,而且到服务器的每一往返过程都将销毁并重新创建页,所以超出单个页的生命周期之后,页信息将不存在。
状态管理的作用
指示用户信息
使得页与页之间、请求与请求之间能够共享信息
更为快速的数据存储和读取
- 从一个客户到达某个网页开始,到其离开该网页为止的这段时间内,服务器会为该用户分配一个Session,以保存该用户会话时所需要的信息
- 当用户在页面之间切换时,存储在Session对象中的变量不会被清除,当客户访问网页时,这些变量会一直存在
- Session状态使用的范围:使用同一个客户端(浏览器实例)访问同一个应用程序的所有页面。
- 虽然Session的大小没有限制,但是我们千万不能滥用Session。推荐在Session中存储少于100K的数据。
- Session是在用户第一次访问网站的时候创建的,那么Session是什么时候销毁的呢?
- 默认情况下,Session的超时时间(Timeout)是20分钟,用户保持连续20分钟不访问网站,则Session被收回,如果在这20分钟内用户又访问了一次页面,那么20分钟重新计时
mode状态模式
-
对于会话状态存储器,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可分为两类:会话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会对数据库造成压力。