会话状态是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. ReadReadMe

    ∮博客说明 §标题格式说明(只在这篇文档中说明一次) 此站博客分两类 普通博客,补丁博客 普通博客标题格式为 NumberType_Title     Number: 博客编号 ,按时间编号,编号只在 ...

  2. 基于WDF的PCI/PCIe接口卡Windows驱动程序(5)-如何为硬件移植驱动程序

    原文地址:http://www.cnblogs.com/jacklu/p/6139347.html 正如前几篇博客所说,使用WDF开发PCIe驱动程序是我本科毕业设计的主要工作.在读研的两年,我也分别 ...

  3. html5 01

    (1)Html 5的概念 能做什么? 为什么学习? HTML5并不仅仅只是做为HTML标记语言的一个最新版本,更重要的是它制定了Web应用开发的一系列标准,成为第一个将Web做为应用开发平台的HTML ...

  4. Abstract Factory Step by Step --- 抽象工厂

    抽象工厂是创建型模式的代表,其他的还有单件(Singleton).生成器(Builder).工厂方法(Factory Method)以及原型(Prototype),模式本身没有好坏之分,只有适用不适用 ...

  5. java 枚举

    DK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: publicstaticfianl... ...

  6. [译]Node.js - Event Loop

    介绍 在读这篇博客之前,我强列建议先阅读我的前两篇文章: Getting Started With Node.js Node.js - Modules 在这篇文章中,我们将学习 Node.js 中的事 ...

  7. MFC 不让程序显示在任务栏上

    如果是对话框程序直接在对话框的 初始化时,修改样式 ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW); 但是对于多文档或是单文档,则没有对应的对话框样式需 ...

  8. libpng安装与配置(Win7+VS2010)

    一.下载 libpng:http://libmng.com/pub/png/libpng.html zlib:http://www.zlib.net/ IDE:VS2010 二.编译 将下载的两个zi ...

  9. 将Linux文件清空的几种方法

    1.使用重定向的方法 [root@centos7 ~]# du -h test.txt .0K test.txt [root@centos7 ~]# > test.txt [root@cento ...

  10. CC1310电源

    CC1310的电源好扯,把目前遇到的问题记录一下 1 全局LDO和DCDC的输出电压问题 手册上要求的VDDR和VDDR_RF的电压范围是1.7~1.95V,但实际测试时, 在接收状态下无论是全局LD ...