1.Session的简单介绍
Session是服务器端存储数据的一种方式,为了解决HTTP的无状态性,Session与Cookie不同的是,Cookie是存储在客户端的,而Session存储在服务器端,所以Session是一种相对比较安全的信息存储方式,同时Session的使用需要Cookie的支持,因为Session对于用户来说并不是共享的,每一个用户的Session都有系统默认的提供一个SessionID,每次用户访问站点的时候,都会将Session ID添加到响应报文头中,发送给服务器,然后由服务器根据SessionID找到具体的存储区域获取到指定的数值。此外Application也是数据存储传递的一种方式,它和Session相比最重要的一点区别就是它里面存储的数据,对于所有的访问站点的用户来说是共享的,所以,一般当需要统计站点的访问的人数的时候,可以将信心存储在Application当中。
因为Session是存储在服务器中,可能会占用服务器大量的内存,所以Session是有一个过期时间的,默认的过期时间是20分钟,可以通过设置Session的属性TimeOut设置Session的过期时间,类似于cookie的Empires属性设置过期时间,同时可以使用Web.config文件中的节点属性timeout进行设置。
2.Session的使用优劣
优点:
1.Session可以解决HTTP的无状态性,实现信息的保持和在页面中的传递,实现页面信息的共享。
2.相对于Cookie而言,Session存在于服务器端,保证数据的安全性。
3.Session是不共享的,独立的保存每一个用户的数据,对于用户来说是安全的。
4.使用简单,可以很轻松的实现对各种类型数据的存储。
缺点:
1.由于数据是存储在服务器端,所以当用户的访问量比较大的时候,占用的内存将比较大,成为瓶颈(主要针对的是InProc模式)。
2.对于StateServer和SqlServer模式来说,当数据的传递的时候,用到的类必须进行可序列化处理,因为这两种模式对于数据的存储和读取使用的是序列化和反序列化,但是序列化和反序列化是相对比较慢的,影响反应速度。
3.Session的使用
添加Session:
Session["Name"]="小明";
设置过期时间:
Session.TimeOut="10";//是以分钟为单位
除去Session:
Session["Name"]=null;//等待GC回收
使用方法去除Session:
Session.Clear();
Session.RemoveAll();
Session.Remove(“Name”);
4.Session的模式设置
1.默认的模式:InProc,这是内存模式,也就是存在于当前服务器的内存中
<System.Web> <sessionState mode="InProc" timeout="10"> </sessionState> </System.Web>
这种方式的优点是显而易见的,存储在服务器的内存中,跟应用程序在同一程序域,也就是在IIS中,访问速度快,但是当访问量过大的时候,这将给服务器带来压力,同时当应用程序重新启动的时候(IIS重启),session将会全部丢失。所以不适合在大访问量并且服务器容易挂掉的场合。
2.StateSession模式,状态服务器模式
<System.Web> <sessionState mode="StateServer" stateConnectionString="tcpip="127.0.0.1:42424" timeout="30"> </sessionState> </System.Web>
这种模式还是比较常用的,需设置stateConnectionString中的tcpip,设置对应的状态服务器的ip地址和端口号,默认的端口号是42424,可以通过修改配置表修改端口。
需要启动State Server服务,具体的方式使用右键点击“我的电脑”,然后选择管理-服务,找到ASP.NET State Server,将服务开启。然后就可以正常使用了
StateServer服务器和IIS是不同的服务器,所以即使IIS重新启动,数据都不会丢失,同时StateServer可以通过设置tcpip,将其部署到某台服务器中。
3.SqlServer模式
需要设置mode=“SqlServer”,同时需要对Sql Server数据库进行配置,具体流程略,配置结束后,会在Sql Server数据库中生成两张表格,用来存储SessionID等信息
这种模式实现的功能和StateServer模式近似,但是这种模式对于数据的存储是持久化的存储,可以使用其他的应用进程进行访问,这是一种最安全可靠的Session存储方式,对于数据的传输,同样需要序列化和反序列化,所以在存取性能是很慢,同时因为需要用到Sql Server数据库,所以必须保证Sql Server的正常运行。
4.Custom模式
这种模式是用户自定义模式,相比于Sql Server模式生成两个默认的表,你可以使用自定义模式,在已有的表中添加,或者自定义表添加。可以存储在其他类型的数据库中,还可以自己手动的创建Session Id代替系统默认的创建,通过实现系统接口ISessionIDManager接口
5.Off模式
禁止使用Session,这是应用程序级别的禁止,在整个应用程序中将被禁止使用Session
同时可以使用页面级别的禁止,这种方式是比较常用的也比较的灵活。
<%@ Page EnableSessionState="false"%>