现在的位置: 首页 > 综合 > 正文

ASP.NET会话(Session)保存模式

2013年10月07日 ⁄ 综合 ⁄ 共 2604字 ⁄ 字号 评论关闭

大家好,已有四个多月没写东东啦。今日抽空就说一下 Session .Net v1.0/v1.1 中的存储模式。大家可在 MSDN 2003 中搜索一下 <sessionState> 即可看到关于 Web.config 中的<sessionState> 节点元素的描述,共有 OffInProcStateServerSQLServer 四种模式。OffInProc 分别指“不启用”、“进程内保存(默认值)”,此两种模式没啥讲的,所谓 InProc 就是把 Session 保存在 aspnet_wp.exe (Windows 2000 解析 ASP.NET页面所用的进程) w3wp.exe (Win2003 的进程) 中,一旦进程被中止或被重置,Session 将丢失。

一、        引发 Session 丢失的几种原因

动过手写代码的人都知道,Session 丢失是比较常见的事。以下是本人这几年所遇到的,能够引发 Session 丢失的原因,不敢说是百分百,丢失概率还是特别高的。错…,简直可以说是“相…当…”高哇 ^_^"

1、    存放 Session 的电脑重启(废话,若这样都不丢,你神仙啊)

2、    InProc 模式:aspnet_wp.exe w3wp.exe 在“任务管理器”中或其它情况下导致其进程被终止运行。

3、    InProc 模式:修改 .cs 文件后,编译了两次(只编译一次,有时不会丢失)

4、    InProc 模式:修改了 Web.config

5、    InProc 模式,Windows 2003 环境:应用程序池回收、停止后重启

6、    InProc 模式:服务器上 bin 目录里的 .dll 文件被更新

以上列举的都是 InProc 模式下,容易引发解析 ASP.NET 应用程序重置的原因。是不是觉得很窝火?之前我也有这种感觉,慢慢就习惯啦,再后来就干脆不用这种模式了。于是乎,就有了使用下列两种模式的尝试,现写出来与大家一起分享。

二、        使用 StateServer 保存 Session

StateServer 模式的实质是,把Session 存放在一个单独的进程里,此进程独立于 aspnet_wp.exe w3wp.exe 。启用此服务后,在“任务管理器”中可以看到一个名为 aspnet_state.exe 的进程,下面开始说明一下设置的具体步骤:

 

1、    修改注册表(关键步骤,如下图)

运行 regedit 打开注册表 找到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/aspnet_state/Parameters 节点 AllowRemoteConnection 的键值设置成“1”(1 为允许,0 代表禁止)→ 设置 Port (端口号)

注意事项:

       a)、若ASP.NET State Service 正在运行,修改注册表内容后,则需要重新启动该服务

b)、注意端口号的键值是以十六进制储存的,可以使用十进制进行修改,42424 是默认的端口

c)AllowRemoteConnection 的键值设置成“1后,意味着允许远程电脑的连接,也就是说只要知道你的服务端口,就可享用你的ASP.NET State Service,即把 Session 存放在你的电脑进程内,因此请大家慎用;键值为“0时,仅有stateConnectionString 为“tcpip=localhost: 42424与“tcpip=127.0.0.1:42424的情况,方可使用ASP.NET State Service

 

 

2、    开启 ASP.NET State Service(如下图)

右键点击“我的电脑”→ 管理 服务与应用程序 服务 双击“ASP.NET State Service 启动(可设为“自动”)

说明:只要安装了 .Net Framework v1.0/v1.1 ,都拥有此服务。

 

 

3、    更改 Web.config

打开 Web.config 找到 <sessionState> 节点内容

<sessionState

            mode="InProc"

            stateConnectionString="tcpip=127.0.0.1:42424"

            sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

            cookieless="false"

            timeout="20" />

 

将其改为以下内容

<sessionState mode="StateServer"  stateConnectionString="tcpip=192.168.0.2:42424" timeout="20" />

注意事项:

       a)、设成StateServer 后,必须要有对应的stateConnectionString

       b)、注意 IP 地址(可以是远程计算机 IP、计算机名称、域名)与端口号,端口号需与ASP.NET State Service 的服务端口一致

 

三、        Session 放入 SQLServer 保存

SQLServer 模式就是,把Session 存放在 SQL Server 数据库里(注意不是 Oracle ,动动脚趾都能猜到原因啦),下面开始说明一下设置的具体步骤:

 

1、    启动相关的数据库服务(如图)

运行SQL Server 服务管理器 启动 SQL Server (最好设为开机自动运行) 启动 SQL Server Agent 服务(最好设为开机自动运行)

注意事项:

       a)、注意启动顺序,也可通过下列方式设置: 右键点击“我的电脑”→ 管理 服务与应用程序 服务 找到“MSSQLSERVER”与“SQLSERVERAGENT 启动并设置启动类型为“自动”

b)SQL Server Agent在此处的作用是清除数据库中已过期的 Session

 

 

2、    建立存放 Session DataBase

运行“SQL 查询分析器”→ 使用“sa”或是拥有“master”的 db_owner 权限的用户登录数据库 打开查询文件 C:/WINNT/Microsoft.NET/Framework/v1.1.4322/InstallSqlState.sql (存放在 Windows 系统目录的 .Net 安装目录下可找到)

【上篇】
【下篇】

抱歉!评论已关闭.