zoukankan      html  css  js  c++  java
  • 使用SQL Server存储ASP.NET Session变量

    创建和配置ASP.NET Session状态数据库
    在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库中供多个Web应用程序调用,以下为配置方法及注意事项。
    1.创建用于存储ASP.NET Session的数据库(远程、本地皆可,使用数据库用户身份认证)
    在WindowsMicrosoft.NETFramework/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配置文件节点信息的程序?

  • 相关阅读:
    ZMQ和MessagePack的简单使用(转)
    easyui datagrid列中使用tooltip
    在bat中执行sql,并配置windows计划任务,并隐藏命令窗口 (转)
    前端基于jquery的UI框架
    菜鸟学步之 爆破AspriseOCR 4.0
    C# 图片识别(支持21种语言) (转)
    IIS Web服务扩展中没有Asp.net 2.0
    遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析
    利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能
    JS Replace() 高级用法(转)
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/3655209.html
Copyright © 2011-2022 走看看