前言
最近在写一个类似商城的网站,使用了Session来保持用户的登录状态,之前没怎么全面的了解Session,趁这个机会彻底了解下Session,一下内容都是基于自己对网络一些资料和大牛的博客整理,还有一些自己的理解。
1.什么是Session
Session称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。
2.SessionID
当用户首次与Web服务器建立连接的时候,服务器会给当前访问用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 Http头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session.(ASP.NET中你如果访问一个后台处理页面,可以用Session.SessionID取值)。客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。
3.Session模式和Session Provider
InProc:会话状态被禁用。
StateServer: 会话状态正在处理 ASP.NET 辅助进程。
SQLServer:会话状态正在使用进程外 ASP.NET 状态服务存储状态信息。
Custom:会话状态正在使用进程外 SQL Server 数据库存储状态信息。
OFF:会话状态正在使用自定义数据存储来存储会话状态信息。
总结:
- 1、 InProc Session Provider是最快的,因为所有数据都存在应用程序的内存里,Session数据在IIS重启,或者站点被回收的情况下丢失,你可以在用户量较小的网站上使用这种模式,但别在Web Farm下使用。
- 2、 State Server模式:Session数据被存储于aspnet_state.exe应用中,他在Web服务之外保存Session数据,所以Web服务出现问题不会对他的Session数据造成影响,在将Session数据存储到StateServer之前需要序列化对象,在Web Farm中我们能安全地使用这个模式。
- 3、 SQL Server模式:他将Session数据保存到SQL Server中,我们需要提供连接串,我们存储时也需要对对象进行序列化,这种模式在实际Web Farm的生产环境中是非常有用的。
- 4、 我们也能使用自定义模式,当我们需要使用一个已经存在的表来存储Session数据时,在自定义模式中,我们也能创建自定义的Session ID,但是不推荐你自己来实现Provider,推荐使用第三方的Provider。
4.使用介绍
web.config中的配置方式 mode:模式,timeout过期时间(分钟)
<system.web> <!--InProc是默认的Session模式--> <sessionState mode="InProc" timeout="30"></sessionState> </system.web>
Sesion的读写
var ss=new User(); Session["user"]=ss;//写入 var bb= Session["user"] as User;//读取
参考地址:
文章中的内容出处:【译文】漫谈ASP.NET中的Session 作者:ULiiAn·竹
Asp.net Session认识加强-Session究竟是如何存储你知道吗? 作者:dz45693
ASP.NET中Session的个人浅谈 作者: FlyElephant