asp_net中的session
缓存Cookie是保存在浏览器端的缓存中,如果设置了保存时间,那么cookie就会存到硬盘中去。
而session是保存在服务器端的。当服务器端产生一个session时,它会对应有一个sessionid,然后把这个sessionid写到一个cookie里面去,随后发到浏览器端。
浏览器端收到这个保存了sessionid的cookie后,将它写到缓存中去。后面浏览器对服务器的请求过程中,都会带着这个cookie。到了服务器端,用cookie中保存的sessionid找到session信息。于是程序员就可以使用这些信息了。
要注意的是:一次会话就是一次session,所以每次请求页面的时候都会有一个cookie带着一个sessionid往返。
Session常用属性、方法
属性:SessionID 唯一用户会话标识符
使用举例:Session.SesstionID
TimeOut 用户超时(单位:分钟),默认20分钟
使用举例:Session.TimeOut=60;
Count 当前的这个SessionID里面保存了多少个键值对。(因为sessionID只有一个,它里面保存了多对键值对)
方法:Abandon 用于显示结束对话
使用举例:Session.Abandon();
Session深入
(1)、Session分三种:
1.InProc(进程内)-默认就是这种(保存在本进程中)
--------------------------------------------------------------------------
(2)、进程外:可以在IIS或ASPNET服务意外关闭时继续保持状态:
(保存在localhost:42424这个套接字所指定的机器中)
2.1StateServer:使用aspnet_state.exe
2.2修改配置文件:
<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424"/>
上面的这句话在默认的情况下是没有的。自己把它写到web.config中的<system.web>这一级目录下面。
localhost改成对方的ip那么session就保存在了对方的机子上面。
2.3设置是否允许远程使用,位置:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
注册表中的启用允许远程
首先打开注册表(Win+R-> regedit)找到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters(AllowRemoteConnection 设置为1就可以了)
2.4默认端口号:42424,当然,也可以自己修改,修改也是在注册表中。在AllowRemoteConnectionr 的下面。
2.5开启服务:我的电脑-管理-服务与应用程序-服务-ASP.NET State Service(ASP.NET 状态服务)
---------------------------------------------------------------------------
(3)、SQLServer(保存在数据库中)
3.1使用aspnet_regsql.exe运行Session数据库脚本(在C:\Windows\Microsoft.NET\Framework\v4.0.30319这个路径中):
临时储存区:InstallSqlState.sql &
UninstallSqlState.sql(保存在数据库中的临时表中,当数据库服务停止的时候,这张表就没有了)
对应的sessionstate: <sessionState mode="SQLServer" sqlConnectionString="server=.\sqlexpress;uid=sa;pwd=sa" ></sessionState>
永久储存区:InstallPersistSqlState.sql
& UninstallPersistSqlState.sql(需要使用SQLServerAgent服务-因为调度作业)
注意:之后配置数据库权限麻烦的话,可以在运行完aspnet_regsql.exe后在数据库中执行你想要使用的sql脚本,就可以不配置权限了。