知识大全 ASP.NET会话(Session)模式

Posted

篇首语:有山必有路,有水必有渡。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET会话(Session)模式相关的知识,希望对你有一定的参考价值。

ASP.NET会话(Session)模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    大家好 已有四个多月没写东东啦 今日抽空就说一下 Session 在 Net v /v 中的存储模式 大家可在 MSDN 中搜索一下 <sessionState> 即可看到关于 nfig 中的<sessionState> 节点元素的描述 共有 Off InProc StateServer SQLServer 四种模式 Off InProc 分别指 不启用 进程内保存(默认值) 此两种模式没啥讲的 所谓 InProc 就是把 Session 保存在 aspnet_wp exe (Windows 解析 ASP NET页面所用的进程) 或 w wp exe (Win 的进程) 中 一旦进程被中止或被重置 Session 将丢失         一         引发 Session 丢失的几种原因        动过手写代码的人都知道 Session 丢失是比较常见的事 以下是本人这几年所遇到的 能够引发 Session 丢失的原因 不敢说是百分百 丢失概率还是特别高的 错… 简直可以说是 相…当… 高哇 ^_^             存放 Session 的电脑重启(废话 若这样都不丢 你神仙啊)            InProc 模式 aspnet_wp exe 或 w wp exe 在 任务管理器 中或其它情况下导致其进程被终止运行             InProc 模式 修改 cs 文件后 编译了两次(只编译一次 有时不会丢失)            InProc 模式 修改了 nfig            InProc 模式 Windows 环境 应用程序池回收 停止后重启            InProc 模式 服务器上 bin 目录里的 dll 文件被更新        以上列举的都是 InProc 模式下 容易引发解析 ASP NET 应用程序重置的原因 是不是觉得很窝火?之前我也有这种感觉 慢慢就习惯啦 再后来就干脆不用这种模式了 于是乎 就有了使用下列两种模式的尝试 现写出来与大家一起分享         二         使用 StateServer 保存 Session        StateServer 模式的实质是 把Session 存放在一个单独的进程里 此进程独立于 aspnet_wp exe 或 w wp exe 启用此服务后 在 任务管理器 中可以看到一个名为 aspnet_state exe 的进程 下面开始说明一下设置的具体步骤             修改注册表(关键步骤 如下图)        运行 regedit → 打开注册表 → 找到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/aspnet_state/Parameters 节点 → 将 AllowRemoteConnection 的键值设置成 ( 为允许 代表禁止)→ 设置 Port (端口号)        注意事项         a) 若ASP NET State Service 正在运行 修改注册表内容后 则需要重新启动该服务        b) 注意端口号的键值是以十六进制储存的 可以使用十进制进行修改 是默认的端口        c) AllowRemoteConnection 的键值设置成 后 意味着允许远程电脑的连接 也就是说只要知道你的服务端口 就可享用你的ASP NET State Service 即把 Session 存放在你的电脑进程内 因此请大家慎用 键值为 时 仅有stateConnectionString 为 tcpip=localhost: 与 tcpip= : 的情况 方可使用ASP NET State Service            开启 ASP NET State Service(如下图)        右键点击 我的电脑 → 管理 → 服务与应用程序 → 服务 → 双击 ASP NET State Service → 启动(可设为 自动 )        说明 只要安装了 Net Framework v /v 都拥有此服务             更改 nfig        打开 nfig → 找到 <sessionState> 节点内容        <sessionState        mode= InProc         stateConnectionString= tcpip= :         sqlConnectionString= data source= ;Trusted_Connection=yes         cookieless= false         timeout= />        → 将其改为以下内容        <sessionState mode= StateServer   stateConnectionString= tcpip= : timeout= />        注意事项         a) 设成StateServer 后 必须要有对应的stateConnectionString        b) 注意 IP 地址(可以是远程计算机 IP 计算机名称 域名)与端口号 端口号需与ASP NET State Service 的服务端口一致        三         将 Session 放入 SQLServer 保存        SQLServer 模式就是 把Session 存放在 SQL Server 数据库里(注意不是 Oracle 动动脚趾都能猜到原因啦) 下面开始说明一下设置的具体步骤             启动相关的数据库服务(如图)        运行SQL Server 服务管理器 → 启动 SQL Server (最好设为开机自动运行) → 启动 SQL Server Agent 服务(最好设为开机自动运行)        注意事项         a) 注意启动顺序 也可通过下列方式设置 右键点击 我的电脑 → 管理 → 服务与应用程序 → 服务 → 找到 MSSQLSERVER 与 SQLSERVERAGENT → 启动并设置启动类型为 自动         b) SQL Server Agent在此处的作用是清除数据库中已过期的 Session            建立存放 Session 的 DataBase        运行 SQL 查询分析器 → 使用 sa 或是拥有 master 的 db_owner 权限的用户登录数据库 → 打开查询文件 C:/WINNT/Microsoft NET/Framework/v /InstallSqlState sql (存放在 Windows 系统目录的 Net 安装目录下可找到) → 直接运行该 sql 脚本 → 刷新数据库即可看到名为 ASPState 的 DataBase            建立连接数据库 ASPState 的用户 并为此用户授权(此步骤可跳过)        进行此步的原因是 一是不想在 nfig 中出现 sa 的密码 二是 tempdb 在数据库启动后仅保留 sa 一个帐号的使用权限 其余帐号的权限统统被清除 但保存 Session又需要用到此 DataBase;        A) 运行 SQL Server 的企业管理器 → 展开数据库的安全性 → 右击 登录 → 新建 登录 → 输入 名称 → 选择 SQL Server 身份验证 → 输入 密码 → 指定 数据库 → 点击 数据库访问 → 勾选 ASPState → 选中 db_owner 角色 → 点击 确定 → 再一次输入 密码 → 点击 确定 后即可建立 ASPState 的用户(此处建立名为 SessionStateUser 密码为 的测试用户)        B) 运行 SQL Server 的企业管理器 → 展开 管理 → 展开 SQL Server 代理 → 右击 作业 → 点击 新建作业 → 输入 名称 (此例为 GrantSessionUser ) → 点击标签 步骤 → 新建 → 输入 步骤名 (此例为 Grant ) → 选择数据库 tempdb → 编写 SQL 脚本 execsp_adduser SessionStateUser SessionUser db_owner → 确定 → 点击标签 调度 → 新建 → 输入 名称 (此例为 Start )→ 选择类型 SQL Server 代理启动时自动启动 → 确定 → 最后点击 确定 新增完毕        C) 也可运行以下脚本一次性搞定以上 A B 两个步骤        /******脚本开始******/        新建数据库帐号 SessionStateUser 默认登录 ASPState        EXEC sp_addlogin SessionStateUser ASPState         use ASPState        切换 DataBase        将 SessionStateUser 授予 db_owner 的权限        exec sp_adduser SessionStateUser SessionUser db_owner         use master            切换 DataBase        BEGIN TRANSACTION        /******声明变量******/        DECLARE @JobID BINARY( )        DECLARE @ReturnCode INT        SELECT @ReturnCode =         若没有 则添加作业的分类        IF (SELECT COUNT(*) FROM msdb dbo syscategories WHERE name = N [Uncategorized (Local)] ) <         EXECUTE msdb dbo sp_add_category @name = N [Uncategorized (Local)]         新建作业         EXECUTE @ReturnCode = msdb dbo sp_add_job   调用存储过程 sp_add_job        @job_id = @JobID OUTPUT            将返回的 JobID 赋值给变量        @job_name = N GrantSessionUser    作业名称        @owner_login_name = NULL            默认为当前用户所有        @description = null         @category_name = N [Uncategorized (Local)]         作业分类归属        @enabled =                     是否启用        @notify_level_email =         @notify_level_page =         @notify_level_netsend =         @notify_level_eventlog =         @delete_level=         IF (@@ERROR <> OR @ReturnCode <> ) GOTO QuitWithRollback 出错则回滚        新建步骤        EXECUTE @ReturnCode = msdb dbo sp_add_jobstep 调用存储过程 sp_add_jobstep        @job_id = @JobID                    传入刚刚新建的 JobID        @step_id =         @step_name = N Grant          步骤名称        @mand = N exec sp_adduser SessionStateUser SessionUser db_owner         需要执行的 SQL 脚本(注意用两个连续的单引号表示 SQL 中的单引号)        @database_name = N tempdb 执行上述 SQL 所用的 DataBase        @server = N         @database_user_name = N         @subsystem = N TSQL     执行类型为 Transact SQL 脚本         @cmdexec_success_code =         @flags =         @retry_attempts =         @retry_interval =         @output_file_name = N         @on_success_step_id =         @on_success_action =         @on_fail_step_id =         @on_fail_action =         IF (@@ERROR <> OR @ReturnCode <> ) GOTO QuitWithRollback         新建调度        EXECUTE @ReturnCode = msdb dbo sp_add_jobschedule        @job_id = @JobID         @name = N Start    调度名称        @enabled =         @freq_type =                表示 当 SQLServerAgent 服务启动时运行        IF (@@ERROR <> OR @ReturnCode <> ) GOTO QuitWithRollback        将新建的作业添加到本地数据库        EXECUTE @ReturnCode = msdb dbo sp_add_jobserver @job_id = @JobID @server_name = N (local)         IF (@@ERROR <> OR @ReturnCode <> ) GOTO QuitWithRollback        MIT TRANSACTION        GOTO   EndSave        QuitWithRollback:        IF (@@TRANCOUNT > ) ROLLBACK TRANSACTION        EndSave:        /******脚本结束******/            设置 nfig 内容        打开 nfig → 找到 <sessionState> 节点内容 → 修改为以下内容即可         <sessionState mode= SQLServer   sqlConnectionString = data source= ; user id= SessionStateUser; password= timeout= />    注意事项         a) sqlConnectionString 中不能出现 initial catalog 选项        b) SQL Server Agent在此处的作用是清除数据库中已过期的 Session        c) 你若跳过了第三步 则 user id 需要用 sa 进行登录        d) 若sqlConnectionString 为 data source= ;Trusted_Connection=yes 则使用本地计算机ASPNET(Windows 系统帐户)或 Neork Service(Windows 系统帐户)的身份登录数据库 要是数据库不允许上述用户登录 则报错 同样 即使上述帐户能成功登录 也要分配其 tempdb 的权限 理由是 Session 是保存在 tempdb 中的 若没有该 DataBase 的存取权限是行不滴 cha138/Article/program/net/201311/13850

相关参考

知识大全 ASP.Net的Session

ASP.Net的Session  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNet中的S

知识大全 Asp.net的Session过期

Asp.net的Session过期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  目录删除及重命

知识大全 ASP.NET MVC 4框架揭秘:Controller的释放和会话状态行为的控制[2]

ASP.NETMVC4框架揭秘:Controller的释放和会话状态行为的控制[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的

知识大全 ASP.NET MVC 4框架揭秘:Controller的释放和会话状态行为的控制[1]

ASP.NETMVC4框架揭秘:Controller的释放和会话状态行为的控制[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的

知识大全 ASP与ASP.NET转换Session数据桥的应用

ASP与ASP.NET转换Session数据桥的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Asp.Net处理Session失效解决方案

Asp.Net处理Session失效解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  检查

知识大全 ASP.NET Session 详解

ASP.NETSession详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  阅读本文章前需要

知识大全 Asp.Net中NHiernate的Session的管理

Asp.Net中NHiernate的Session的管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Asp.net中判断一个session是否合法的方法

Asp.net中判断一个session是否合法的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.Net Session超时的问题

ASP.NetSession超时的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &