创建和配置ASP.NET Session状态数据库
在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库中供多个Web应用程序调用,以下为配置方法及注意事项。
1.创建用于存储ASP.NET Session的数据库(远程、本地皆可,使用数据库用户身份认证)
在Windows\Microsoft.NET\Framework/V2.0.50727目录下使用如下命令:

命令: aspnet_regsql.exe -S QQ442518843 -U sa -P Admin123456  -ssadd -sstype c -d SessionDemo 

参数说明:

服务器地址如:QQ442518843

用户名:sa

密码:Admin123456 

数据库名:SessionDemo 

命令执行后会创建两张表:ASPStateTempApplications ,ASPStateTempSessions  和相关的存储过程

命令执行后就会成功建立起用于存储ASP.NET Session变量的数据库了。
2.Web.Config文件配置项
我们需要在ASP.NET Web应用程序中的Web.Config文件修改sessionState配置项以使Session状态数据库生效。
配置节点如下:
<sessionState mode="SQLServer"
            sqlConnectionString="server=<Server IP>;database=<Database Name>;uid=<User Name>;pwd=<Password>;"
allowCustomSqlDatabase="True"
            cookieless="false"
            timeout="20" />
3.注意在进行系统测试(主要是负载测试)的时候,因为数据库访问负载的增加,需要调整SQL Server相应超时的配置项以适应负载。(默认值为10,请适度进行调整。)
ASP.NET Session状态数据库数据模型
1.ASPStateTempSessions表定义

列名
类型
描述

SessionId
nvarchar(88)
Session ID + application ID

Created
datetime
Date and time session was created (UTC)

Expires
datetime
Date and time session expires (UTC)

LockDate
datetime
UTC date and time session was locked

LockDateLocal
datetime
Local date and time session was locked

LockCookie
int
Lock ID

Timeout
int
Session timeout in minutes

Locked
bit
1=Session locked, 0=Session not locked

SessionItemShort
varbinary(7000)
Serialized session state (if <= 7,000 bytes)

SessionItemLong
image
Serialized session state (if > 7,000 bytes)

Flags
int
Session state flags (1=Uninitialized session)

2.ASPStateTempApplications表定义

列名
类型
描述

AppId
int
Application ID

AppName
char(280)
Application name

3.使用的存储过程

Stored Procedure
Description

CreateTempTables
Creates the ASPStateTempSessions and ASPStateTempApplications tables; called during setup, but not called by SqlSessionStateStore.

DeleteExpiredSessions
Used by SQL Server Agent to remove expired sessions.

GetHashCode
Hashes an application name and returns the hash; called by TempGetAppID.

GetMajorVersion
Returns SQL Server's major version number.

TempGetAppID
Converts an application name into an application ID; queries the ASPStateTempApplications table and inserts a new record if necessary.

TempGetStateItem
Retrieves read-only session state from the database (ASP.NET 1.0; ASP.NET 1.1/SQL Server 7).

TempGetStateItem2
Retrieves read-only session state from the database (ASP.NET 1.1).

TempGetStateItem3
Retrieves read-only session state from the database (ASP.NET 2.0).

TempGetStateItemExclusive
Retrieves read/write session state from the database (ASP.NET 1.0; ASP.NET 1.1/SQL Server 7).

TempGetStateItemExclusive2
Retrieves read/write session state from the database (ASP.NET 1.1).

TempGetStateItemExclusive3
Retrieves read/write session state from the database (ASP.NET 2.0).

TempGetVersion
Marker whose presence indicates to ASP.NET 2.0 that the session state database is ASP.NET 2.0-compatible.

TempInsertStateItemLong
Adds a new session, whose size is > 7,000 bytes, to the database.

TempInsertStateItemShort
Adds a new session, whose size is <= 7,000 bytes, to the database.

TempInsertUninitializedItem
Adds a new uninitialized session to the database in support of cookieless sessions.

TempReleaseStateItemExclusive
Releases a lock on a session; called when ASP.NET determines that a request has timed out and calls the provider'sReleaseItemExclusive method.

TempRemoveStateItem
Removes a session from the database when the session is abandoned.

TempResetTimeout
Resets a session's timeout by writing the current date and time to the corresponding record's Expires field.

TempUpdateStateItemLong
Updates a session whose size is > 7,000 bytes.

TempUpdateStateItemLongNullShort
Updates a session whose old size is <= 7,000 bytes, but whose new size is > 7,000 bytes.

TempUpdateStateItemShort
Updates a session whose size is <= 7,000 bytes.

TempUpdateStateItemShortNullLong
Updates a session whose old size is > 7,000 bytes, but whose new size is <= 7,000 bytes.

ASP.NET 状态数据库FAQ
1.如果把SESSION值存放到数据库中去,用户关闭了程序那怎么样清空数据库里的SESSION值呢?
   实际ASP.NET在创建状态数据库的时候会在SQL Server代理(SQL Server Agent)的作业中添加一个作业,名称为<状态数据库名>_Job_DeleteExpiredSessions。如果打开SQL Server代理服务数据库可以通过添加的状态记录的超时时间字段(Exprires)定期对超时的状态数据进行删除。
2.ASPStateTempSessions表中的SessionId字段如何使用?
数据库中此表的SessionID字段的值,由SessionID和AppID共同组成,最后8位为AppID所以,后8位之前一定是SessionID。例如,存储在数据库中的值为"ekr30c3mwvnc3145yrswew3a037e5e5a",后8位的"037e5e5a"为AppID,而前面的"ekr30c3mwvnc3145yrswew3a"为应用程序中你可以使用Session.SessionID获得的字符串。
3.如何判断Session何时被更新的?
Session记录被更新时会同时更新Expires和LockDateLocal,Expires字段为UTC时间,如果想通过本地之间进行比较判断还是需要使用LockDateLocal。
4.获得Web.config配置文件节点信息的程序?

使用SQL Server存储ASP.NET Session变量的更多相关文章

  1. 采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)

    前言 之前有过2篇关于如何监控ASP.NET core项目的文章,有兴趣的也可以看看. 今天我们主要来介绍一下,如何使用Opserver监控我们的SQL Server 和ASP.NET项目的异常监控 ...

  2. SQL SERVER存储引擎——04.数据

    4. SQL SERVER存储引擎之数据篇 (4.1)文件 (0)主数据文件.mdf初始文件大小至少为3MB,次要数据文件.ndf初始大小,同日志文件一样至少为512KB: (1)SQL SERVER ...

  3. SQL Server存储ntext截断问题

    SQL Server存储ntext截断问题   最近遇到一个问题:将大文本存储到数据库的时候,查询出来的文本却被截断了. 最后百度发现,作者提出 sql server management studi ...

  4. SQL Server 存储中间结果集

    在SQL Server中执行查询时,有一些操作会产生中间结果集,例如:排序操作,Hash Join和Hash Aggregate操作产生的Hash Table,游标等,SQL Server查询优化器使 ...

  5. [转]SQL Server中临时表与表变量的区别

    [转]http://blog.csdn.net/skyremember/archive/2009/03/05/3960687.aspx 我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是 ...

  6. SQL Server中临时表与表变量的区别

    我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候 ...

  7. SQL Server 存储字符数较大字段的问题

    SQL Server 2000专门提供了处理text,ntext,image字段的函数,他们是: TEXTPTR TEXTVALID READTEXT UPDATETEXT WRITETEXT 一般作 ...

  8. SQL Server 存储(1/8):理解数据页结构

    我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行.也就是说,SQL Server 读取或写入所有数据页.页有不同的类型,像数据页,GA ...

  9. SQL Server 存储(3/8):理解GAM和SGAM页

    我们知道SQL Server在8K 的页里存储数据.分区就是物理上连续的8个页.当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时,页会分配给它用来存储数据.GAM(Global Al ...

随机推荐

  1. 2016 - 1 -19 初学HTML5 第一天

    1.HTML COMMANDS MHTL commands called elements.Usually, an element has a start tag and an end tag e.g ...

  2. (spring-第10回【IoC基础篇】)InstantiationStrategy--实例化Bean的第三大利器

    Bean的实例化整个过程如下图: : 其中,BeanDefinition加入到注册表中,并由BeanFactoryPostProcessor的实现类处理后,需要由InstantiationStrate ...

  3. Reachability判断网络是否连接

    类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...

  4. Design Patterns----简单的工厂模式

    实例: 实现一个简单的计算器.实现加减乘除等操作.. operator.h 文件 // copyright @ L.J.SHOU Mar.13, 2014 // a simple calculator ...

  5. iOS:开发者中心证书创建流程

    一,首先点击开发者首页(https://developer.apple.com/)里面的Member Center.二,输入开发者账号和密码,点击sign in登录.三,点击Certificates, ...

  6. DIV+CSS设计IE6浮动产生双倍距离

    <!doctype html><html><head> <meta name="Keywords" content="" ...

  7. 把input类型剔出来

    <!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Linux 基础入门(新版)(实验一至实验四)

    1.实验一  Lniux简介   操作系统:系统调用+内核 Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺:有全球所有的 Linux ...

  9. session 原理 数据结构

    [原创]转载请保留出处:shoru.cnblogs.com 晋哥哥的私房钱 引言 在web开发中,session是个非常重要的概念.在许多动态网站的开发者看来,session就是一个变量,而且其表现像 ...

  10. 【题解】【链表】【Leetcode】Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...