ASP.NET(八)--session
一、概念:将数据储存在服务器端缓存中,并根据SessionId访问的一种数据储存机制。
二、SessionID的传递方式:
默认使用【浏览器缓存Cookie】保存;如果浏览器禁用了Cookie,则将SessionID放入Url中来传递。
三、特点:
a.它能存储任何数据类型包括自定义对象。
b.保持【某个用户】的某些数据状态;其它用户访问不到他的数据;(因为SessionId信息以cookie的方式保存访问者浏览器的缓存里了)
c.让用户在使用浏览器访问本网站时可以在任意页面拿到Session中的数据;(因为当用户在应用程序中从一个网页浏览到另一个网页时,存储在 Session 对象中的变量不会被丢弃。)
d.保存在服务器端的session池中比较安全,sessionId和session对象是键值对的关系;
e.Session对象有失效期,当session对象过期时,服务器会清除session对象。
f.一旦用户关闭浏览器,则丢失了SessionID,那么服务器的Session数据将在默认时间后自动销毁。注意:当会话(Session)过期或终止时,服务器就会清除 Session 对象
g.开发场景:常用于保存登录用户ID
四、原理:
session以cookies的形式(SetCookie:)存在浏览器缓存中(而非硬盘中),但是没有设置失效时间。关闭浏览器后,浏览器缓存就没有了。20分钟内不去访问,session池中的键值对就没有人访问了,20分钟内没被访问,session就会被销毁。每次生成程序集时,session重启。
在第8个事件创建完被请求的页面对象之后,也就是第9个事件中,asp.net机制会检测当前页面对象是否实现了System.Web.SessionState.IRequiresSessionState接口
如果实现了,则:获取请求报文里存在cookie中的 SessionId,然后到服务端的Session池里去找,找到对应的Session对象,并把引用交给当前请求上下文的Session属性。
如果没有实现,则不去加载Session属性。
五、Session的操作
1.开始并为Session赋值:Session[“uName”]=“James”;
2.取值: string strName = Session[“uName”].ToString();
3.销毁(取消/退出):
Session.Abandon();//销毁服务器端的Session对象
4.注意:
一般处理程序中如果要访问Session就必须实现 IRequiresSessionState接口,要添加引用System.Web.SessionState
而WebForm的前台页面类,在编译的时候,自动的加上了IRequiresSessionState接口
六、进程外保存session的方式:
Session分三种:
1.进程内(InPro,默认):速度快,但容量较小,当出现大数据量的时候会自动重启,从而丢失所有的Session。
2.进程外:可以在IIS或ASPNET服务意外关闭时继续保持状态,注意此时存储到session中的对象必须支持序列化
1)状态服务(StateServer):使用aspnet_state.exe, 专门一个存放Session的进程,不随服务器关闭和启动,存放的数据量也比较大,但关闭电脑就没了。
a)修改配置文件:
b)设置是否允许远程使用,位置:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
c)默认端口号:42424
d)开启服务:我的电脑-管理-服务与应用程序-服务-ASP.NET State Service(ASP.NET 状态服务)
2)数据库:
新建ASPSTATE数据库使用运行Session数据库脚本:
临时储存区:InstallSqlState.sql & UninstallSqlState.sql
永久储存区:InstallPersistSqlState.sql & UninstallPersistSqlState.sql(需要使用SQLServerAgent服务-因为调度作业)
注意:之后配置数据库权限麻烦的话,可以在运行完aspnet_regsql.exe后在数据库中执行你想要使用的sql脚本,就可以不配置权限了。
优点是永久保存,缺点需要读取硬盘。由于浏览器SessionId无法长久保存,所以一般不使用数据库保存Session。
浙公网安备 33010602011771号