(1)建立存放 Session 的 DataBase
打开Visual Studio 命令提示工具执行下面的命令,此命令会创建存储Session的数据库ASPState、清除过期Session的作业,以及相应的一些存储过程。
D:/Microsoft Visual Studio 9.0/VC>aspnet_regsql -S 192.168.4.188 -U sa -P dianji
an@2010 -ssadd -sstype p
会话数据保存在指定的SQLServer数据库中,会话数据通过SessionID进行查找,理论上只需要使多个站点共享同一会话数据库即可共享会 话数据,确定了思路便好办。多个站点共享统一会话数据库在.NET下是很容易的事情,只需要在WEB.CONFIG里配置sessionState节点指 定会话存储模式以及相同的会话数据库即可。事情没有这么简单,不同的站点其SessionID是不同的,就算SessionID相同了,保存在会话数据库 中的实际SessionID的值也不只是网站生成的SessionID,而是在SessionID后加上了站点的AppName,因此即使各个站点共享了 会话数据库也不能共享会话数据。打开会话数据表ASPStateTempSessions中的记录,可以发现如下几个数据
ASPStateTempSessions各个字段的意义如下:
表1 ASPStateTempSessions表
列 |
类 型 |
描 述 |
SessionId |
char(88) |
索引字段,它表示会话ID |
Created |
DateTime |
指出会话被创建的时间。默认值为当前时间 |
Expires |
DateTime |
指出会话将到期的时间。该值一般等于会话状态的创建时间加上Timeout中指定的分钟数。注意,Created指会话的创建时间,而 Expires把分钟数加到第一个数据项被添加到会话状态的时间 |
LockDate |
DateTime |
指出会话被锁定以添加最后一个数据项的时间。该值表示为当前的UTC(Universal Time Coordinate)时间 |
LockDateLocal |
DateTime |
与LockDate一样,但是它只表示系统的本地时间。ASP.NET 1.x不支持该列 |
LockCookie |
int |
指出该会话被锁定的次数——即,访问次数 |
Timeout |
int |
指出会话的超时时间(以分为单位) |
Locked |
bit |
指出会话当前没有被锁定 |
SessionItemShort |
VarBinary(7000) |