会话状态是ASP.NET应用程序状态的其中一种,这种状态的特点是以用户为单位,每个会话对应一个用户,也就是说在该用户的整个访问过程,会话状态保存的数据都会持续保存于服务器的介质中,直到会话超时(即用户超过指定时间没有存取会话数据)。在服务器端保存会话状态的方式有几种,分别为:

1)InProc——这种方式会话状态保存在ASP.NET运行进程内,具体位置就是ASP.NET的Cache(高速缓存)内。
2)StateServer——这种方式会话状态保存在ASP.NET所带有的Wiindows服务进程中,该服务默认是禁用的,需要人手启动。
3)SQL Server——这种方式会话状态保存到SQL Server所管理的数据库中。具体又可以分为保存在临时数据库,ASPState数据库和自定义数据库三种方式。
4)自定义提供程序——这种方式要求开发人员自己开发会话状态的提供程序,会话状态的存取方式完全由该提供程序决定,由此可以保存在其他SQL数据库,或者XML文件,甚至文本文件中都可以。
 
本文目的在于说明怎样配置使用SQL Server来保存会话状态。
整个配置过程分为两部分:
第一部分,在ASP.NET程序运行的服务器上,配置所使用的数据库服务器。
第二部分,在ASP.NET程序的配置文件中修改会话状态的保存方式。
 
配置所使用的数据库服务器
1)运行aspnet_regsql.exe程序,该程序位于目录C:\WINDOWS\Microsoft.NET\Framework\<ASP.NET版本号>下。首先双击运行该程序,为ASP.NET配置SQL Server。
选择“下一步”
选择按图中所示进行选择,然后“下一步”
填入与ASP.NET关联的数据库服务器信息,注意这里选择的数据库,在往后的ASP.NET应用程序中是可以改变的。填入完成之后选择“下一步”
之后还有两个界面,不过在那两个界面中只需要“下一步”,没有可选择的信息,所以这里不列出来了。
 
2)配置会话状态使用的数据库库。
正如刚才所说,使用数据库保存会话也分三种方式,临时数据库(SQL Server重启后会丢失数据)、ASPState数据库和自定义数据库。
注意 -ssadd, -E, -sstype 指令。
    -ssadd 指令的功能是添加会话数据库,默认是添加到临时数据库
    -E 指令的功能是使用WINDOWS身份验证,因为我演示的SQL Server在本机上,所以使用该指令才能连接,单独的 -ssadd是运行不了的。
    -sstype 指令的功能是指定会话状态使用哪个数据库。随后的参数有 t、p'和c ,分别为临时数据库,ASPState数据库库和自定义数据库。
    -d 的功能是在指定自定义数据库的时候,指定该数据库的名称,以数据库名称做参数。
 
使用临时数据库保存会话状态的指令
临时数据库中多了两个用于保存会话状态信息的表。

 
使用ASPState数据库保存会话状态的指令
执行之后,在数据库中出现了新的数据库ASPState。其中带有的表跟之前在临时数据库中的一致。

 
使用自定义数据库TestCustom数据库保存会话状态的指令
除了拥有上述的表之外,还带有一系列自动添加上去的存储过程,其实这些存储过程不是自定义数据库才特有的。无论使用哪种数据库,都会有这些存储过程,只是当从一种数据库改到另一种数据库的时候,表会留下来,但存储过程就会全部转移到新使用的数据库中。
 
想要取消使用以上的设置,只需要-ssremove -E指令。
以上这些只能在本机的数据库中创建会话数据库,但正规的操作是不应该在数据库服务器上直接进行这些操作,很可能该服务器上根本没有ASP.NET的组件。
因此我们需要从ASP.NET程序的部署服务器,通过远程连接来进行配置,以下将演示这一实例,通过我的计算机连接到团队成员的远程计算机上。
 
要先说明,在CMD中运行aspnet_regsql.exe,要进行远程连接,需要使用-S -U -P指令,分别指定:数据库服务器名称/地址、连接使用的帐号和密码。
同时必须注明,要在SQL Server中配置会话数据库,必须具有创建表格,创建数据库,创建存储过程,和MSDB的RSExecRole角色权限。否则配置过程一定会出错。
以上配置指令在 119.120.74.150的机器上,使用帐号密码均为silin建立连接,然后创建一个自定义数据库TestCustom来保存会话状态。
 
以上就是关于ASP.NET使用SQL Server的配置。接下来是配置文件的修改。
 
修改ASP.NET程序的配置文件
 
在ASP.NET的配置文件中找到<sessionState>区段,很可能没有这个区段,因为存在默认设置,这里假设没有这个区段,重新写入。
 
<sessionState mode="SQLServer" sqlConnectionString="所需连接字符串" /> 只需要这么简单的设置。当然还有其他设置,但要起到作用,最少只需要这两个属性设置就OK了。
 
完成上述设置之后,在程序中的存取的会话数据就会自动保存到数据库中,整个编码过程没有任何改动。ASP.NET的这个提供程序机制,的确把代码实现跟数据保存方式分离了。不过要注意,当把会话状态保存到ASP.NET运行进程以外的介质时,必定会进行序列化和反序列化,因此必须注意会话状态中保存的类型是否能够进行序列化。

[ASP.NET]配置使用SQL Server保存会话状态的更多相关文章

  1. C# ASP.NET(配置数据库 sql server 地址的两种形式以及配置信息的获取)

    ( 1 ) 数据库装在本机,并且采用windows认证模式 <connectionStrings>    <add name="SQLConnectionString&qu ...

  2. 通过 Docker Compose 组合 ASP NET Core 和 SQL Server

    目录 Docker Compose 简介 安装 WebApi 项目 创建项目 编写Dockfile Web MVC 项目 创建项目 编写Dockfile 编写 docker-compose.yml文件 ...

  3. 使用SQL Server保存Session状态,实现单点登录

    在做一些应用网站时,我们可能会碰到这样一种情况:整个项目是由多个网站组成的,而我们要实现用户从一个站点登录后,跳转到其他网站不需要重复登录,即实现单点登录.目前实现单点登录的技术也有好几种,这篇文章描 ...

  4. ASP.net(C#)利用SQL Server实现注册和登陆功能

    说说我现在吧,楼主现在从事的事IT行业,主攻DotNet技术:当然这次上博客园我也是有备而来,所有再次奉献鄙人拙作,以飨诸位,望诸位不吝赐教. 世界上大多数的工作都是熟练性的工种,编程也不例外,做久了 ...

  5. ASP.NET代码调用SQL Server带DateTime类型参数的存储过程抛出异常问题

    ASP.NET代码调用SQL Server带DateTime类型参数的存储过程,如果DateTime类型参数的值是'0001/1/1 0:00:00'时,就会抛出异常“Message: SqlDate ...

  6. ASP.NET MVC与Sql Server交互,把字典数据插入数据库

    在"ASP.NET MVC与Sql Server交互, 插入数据"中,在Controller中拼接sql语句.比如: _db.InsertData("insert int ...

  7. ASP.NET MVC与Sql Server交互, 插入数据

    在"ASP.NET MVC与Sql Server建立连接"中,与Sql Server建立了连接.本篇实践向Sql Server中插入数据. 在数据库帮助类中增加插入数据的方法. p ...

  8. .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载

    223本电子书籍,囊括了.NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Shell/A ...

  9. ASP调用存储过程访问SQL Server

     ASP调用存储过程访问SQL Server 2011-02-15 10:22:57 标签:asp 数据库 sQL 存储过程 Server ASP和存储过程(Stored Procedures)的文章 ...

随机推荐

  1. Mysql 相关字段类型长度

    1.  Compact行记录是在MySQL 5.0时被引入的,其设计目标是能高效存放数据. 2.  Redundant是MySQL 5.0版本之前InnoDB的行记录存储方式. 3.  InnoDB存 ...

  2. iOS各种调试技巧豪华套餐

    转载自http://www.cnblogs.com/daiweilai/p/4421340.html 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global Break ...

  3. python-etcd

    Client 对象 ['_MDELETE', '_MGET', '_MPOST', '_MPUT', '__class__', '__contains__', '__del__', '__delatt ...

  4. hbase hmaster故障分析及解决方案:Timedout 300000ms waiting for namespace table to be assigned

    最近生产环境hbase集群出现停掉集群之后hmaster无法启动现象,master日志报异常:Timedout 300000ms waiting for namespace table to be a ...

  5. mybatis执行批量更新update

    Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/.目前想批量更新,如果update的值是相同的话 ...

  6. 一、prolog简介

    一般来说,人工智能语言应具备如下特点: 1.具有符号处理能力(即非数值处理能力): 2.适合于结构化程序设计,编程容易: 3. 具有递归功能和回溯功能: 4. 具有人机交互能力: 5. 适合于推理: ...

  7. Matlab melband的计算

    %% mel bankmelnum = 24;low = 0;high = 0.5;melbank=melbankm(melnum,fftsize,Fs,low,high,'m');%归一化mel滤波 ...

  8. firefox浏览器不支持复制粘贴(linux)

    在Linux主机下使用firefox在线编辑文章时,提示不支持复制粘贴选项,并给出了解决方法,记录一下 1.先找到本机firefox的配置文件的所在文件夹位置,不知道的请遵循以下步骤 点击菜单栏的帮助 ...

  9. Unity 几种优化建议

    转: http://user.qzone.qq.com/289422269/blog/1453815561?ptlang=2052 Unity 几种优化建议 最简单的优化建议: 1.PC平台的话保持场 ...

  10. 3.struts2接收页面传参的三种方式

    Struts2通过拦截器机制封装了三种接收页面参数的方式: 1.属性驱动 2.模型驱动(有两种) Domain ModelDriven 1.属性驱动:这种方式比较简单,只要你直接在页面定义变量并且符合 ...