使用SQL Server存储ASP.NET Session变量

创建和配置ASP.NET Session状态数据库
在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库中供多个Web应用程序调用,以下为配置方法及注意事项。
1.创建用于存储ASP.NET Session的数据库(远程、本地皆可,使用数据库用户身份认证) 在Windows\Microsoft.NET\Framework/V2.0.50727目录下使用如下命令: aspnet_regsql.exe -S <SQL Server IP> -U <User Name> -P <Password> -E -ssadd -sstype c -d <Database Name> 命令执行后就会成功建立起用于存储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表定义

列名类型描述
SessionIdnvarchar(88)Session ID + application ID
CreateddatetimeDate and time session was created (UTC)
ExpiresdatetimeDate and time session expires (UTC)
LockDatedatetimeUTC date and time session was locked
LockDateLocaldatetimeLocal date and time session was locked
LockCookieintLock ID
TimeoutintSession timeout in minutes
Lockedbit1=Session locked, 0=Session not locked
SessionItemShortvarbinary(7000)Serialized session state (if <= 7,000 bytes)
SessionItemLongimageSerialized session state (if > 7,000 bytes)
FlagsintSession state flags (1=Uninitialized session)
2.ASPStateTempApplications表定义
列名类型描述
AppIdintApplication ID
AppNamechar(280)Application name

 

3.使用的存储过程

Stored ProcedureDescription
CreateTempTablesCreates the ASPStateTempSessions and ASPStateTempApplications tables; called during setup, but not called by SqlSessionStateStore.
DeleteExpiredSessionsUsed by SQL Server Agent to remove expired sessions.
GetHashCodeHashes an application name and returns the hash; called by TempGetAppID.
GetMajorVersionReturns SQL Server's major version number.
TempGetAppIDConverts an application name into an application ID; queries the ASPStateTempApplications table and inserts a new record if necessary.
TempGetStateItemRetrieves read-only session state from the database (ASP.NET 1.0; ASP.NET 1.1/SQL Server 7).
TempGetStateItem2Retrieves read-only session state from the database (ASP.NET 1.1).
TempGetStateItem3Retrieves read-only session state from the database (ASP.NET 2.0).
TempGetStateItemExclusiveRetrieves read/write session state from the database (ASP.NET 1.0; ASP.NET 1.1/SQL Server 7).
TempGetStateItemExclusive2Retrieves read/write session state from the database (ASP.NET 1.1).
TempGetStateItemExclusive3Retrieves read/write session state from the database (ASP.NET 2.0).
TempGetVersionMarker whose presence indicates to ASP.NET 2.0 that the session state database is ASP.NET 2.0-compatible.
TempInsertStateItemLongAdds a new session, whose size is > 7,000 bytes, to the database.
TempInsertStateItemShortAdds a new session, whose size is <= 7,000 bytes, to the database.
TempInsertUninitializedItemAdds a new uninitialized session to the database in support of cookieless sessions.
TempReleaseStateItemExclusiveReleases a lock on a session; called when ASP.NET determines that a request has timed out and calls the provider's ReleaseItemExclusive method.
TempRemoveStateItemRemoves a session from the database when the session is abandoned.
TempResetTimeoutResets a session's timeout by writing the current date and time to the corresponding record's Expires field.
TempUpdateStateItemLongUpdates a session whose size is > 7,000 bytes.
TempUpdateStateItemLongNullShortUpdates a session whose old size is <= 7,000 bytes, but whose new size is > 7,000 bytes.
TempUpdateStateItemShortUpdates a session whose size is <= 7,000 bytes.
TempUpdateStateItemShortNullLongUpdates 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配置文件节点信息的程序?

 

 

Code ''获得Web.config文件配置实例Dim configuration As System.Configuration.Configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/web.config")
''获得状态配置节点实例Dim mSessionStateSection As System.Web.Configuration.SessionStateSection =CType(configuration.GetSection("system.web/sessionState"),System.Web.Configuration.SessionStateSection)
''获得状态模式Response.Write(mSessionStateSection.Mode) ''获得状态超时时间Response.Write(mSessionStateSection.Timeout)

 

转载于:https://www.cnblogs.com/zxktxj/archive/2012/03/09/2387416.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux工具快速教程

From&#xff1a;https://linuxtools-rst.readthedocs.io/zh_CN/latest/index.html 博客&#xff1a;http://blog.me115.comGithub地址&#xff1a;https://github.com/me115/linuxtools_rst分为三个部分&#xff1a; 第一部分为基础篇&#xff0c;介绍我们工作中常用的工具的…

学界 | DeepMind想用IQ题测试AI的抽象思维能力,进展还不错

来源&#xff1a;大数据文摘摘要&#xff1a;抽象理解能力一直是人类引以为豪的智慧来源。阿基米德基于对物体体积的抽象理解&#xff0c;悟到了物体的体积与物体浮力之间的关系。这就是抽象推理的魔力。基于神经网络的机器学习模型取得了惊人的成绩&#xff0c;但是测量其推理…

frida hook so层、protobuf 数据解析

手机安装 app &#xff0c;设置代理&#xff0c;然后开始抓包。 发现数据没法解密&#xff0c;查看请求的 url 是 http://lbs.jt.sh.cn:8082/app/rls/monitor&#xff0c;使用 jadx 反编译 app 后搜索这个 url&#xff08;提示&#xff1a;可以只搜索 url 中一部分&#xff0c;…

PHP session的工作原理

PHP SESSION原理我们知道&#xff0c;session是在服务器端保持用户会话数据的一种方法&#xff0c;对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议&#xff0c;服务器响应完之后就失去了与浏览器的联系&#xff0c;最早&#xff0c;Netscape将cookie引入浏览器…

大数据技术与应用解读及案例分析(PPT)

来源&#xff1a;网络大数据摘要&#xff1a;大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。大数据就是未来的石油。未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学…

pywin32库 : Python 操作 windows 系统 API

Python 模块虽多&#xff0c;但也不可能满足所有需求。而且&#xff0c;模块为了便于使用&#xff0c;通常都封装过度&#xff0c;有些功能无法灵活使用&#xff0c;必须直接调用Windows API 来实现。要完成这一目标&#xff0c;有两种办法&#xff0c;一种是使用 C 编写 Pytho…

JVM内存管理:深入Java内存区域与OOM

Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙&#xff0c;墙外面的人想进去&#xff0c;墙里面的人却想出来。 概述&#xff1a; 对于从事C、C程序开发的开发人员来说&#xff0c;在内存管理领域&#xff0c;他们即是拥有最高权力的皇帝又是执行最基础工作的劳动…

华为秘密作战计划曝光,重注研发AI芯片挑战英伟达,轮值董事长挂帅

雷刚 问耕 发自 凹非寺 量子位 报道 | 公众号 QbitAI摘要&#xff1a;据报道&#xff0c;对于如何把AI引入所有业务&#xff0c;华为内部已经开启了代号为“达芬奇”的作战计划&#xff0c;并且成为华为高层每月一次讨论会的重点议题&#xff0c;也有不少华为高管以“D项目”来…

Python --- ctypes库的使用

ctypes 的官方文档 英文文档&#xff1a;https://docs.python.org/3/library/ctypes.html中文文档&#xff1a;https://docs.python.org/zh-cn/3.10/library/ctypes.html Python--ctypes(数据类型详细踩坑指南&#xff09;&#xff1a;https://zhuanlan.zhihu.com/p/145165873…

java单利模式写法

public class Something {private Something() {}private static class LazyHolder {public static final Something INSTANCE new Something();}public static Something getInstance() {return LazyHolder.INSTANCE;} } 这样的懒汉单例模式的实现&#xff0c;唯一的缺点是当…

机器学习近年来之怪现象

来源&#xff1a;网络大数据人工智能领域的发展离不开学者们的贡献&#xff0c;然而随着研究的进步&#xff0c;越来越多的论文出现了「标题党」、「占坑」、「注水」等现象&#xff0c;暴增的顶会论文接收数量似乎并没有带来更多技术突破。最近&#xff0c;来自卡耐基梅隆大学…

PySide6 : Qt for Python 教程

Qt for Python 教程&#xff1a;https://doc.qt.io/qtforpython/tutorials/index.html 官方文档示例&#xff1a;https://doc.qt.io/qtforpython/examples/index.html Qt for Python 提供了一系列带有演练指南的教程&#xff0c;以帮助新用户入门。 其中一些文档是从 C 移植到…

C语言scanf函数奇遇记

C语言scanf函数奇遇记 作者&#xff1a;ocean 撰写日期&#xff1a;2011-11-20 博客链接&#xff1a;http://oceanspace.tk 看《The C Programming Language》中关于scanf函数部分时随意敲了几行代码&#xff0c;本以为简单的不得了&#xff0c;都有点“不屑于”敲&#xff…

PySide6 信号、槽

信号与槽的入门应用&#xff08;一&#xff09;&#xff1a;https://blog.csdn.net/jia666666/article/details/81774175 信号与槽的再细分&#xff08;二&#xff09;&#xff1a;https://blog.csdn.net/jia666666/article/details/81774858 信号与槽的高级玩法&#xff08;三…

芯片业又起波澜!博通189亿美元收购遭质疑,股价一度跌近19%

来源&#xff1a;华尔街见闻摘要&#xff1a;如果说博通上次收购高通面临的最大“对手”是特朗普政府&#xff0c;这次收购CA的“对手”可能是华尔街。如果说博通上次收购高通面临的最大“对手”是特朗普政府&#xff0c;这次收购CA的“对手”可能是华尔街。美东时间周三&#…

JavaScript常用技巧专题五

文章目录 一、使用适当的命名和注释来提高代码可读性二、优雅的写条件判断代码2.1、普通的if else2.2、三元运算符2.3、多个if else2.4、switch case2.5、对象写法2.6、Map写法 三、封装条件语句四、函数应该只做一件事五、Object.assign给默认对象赋默认值六、函数参数两个以下…

写出漂亮代码的七种方法

首先我想说明我本文阐述的是纯粹从美学的角度来写出代码&#xff0c;而非技术、逻辑等。以下为写出漂亮代码的七种方法&#xff1a; 1.尽快结束 if 语句 例如下面这个JavaScript语句&#xff0c;看起来就很恐怖&#xff1a; function findShape(flags, point, attribute, list)…

HTML 页面的生命周期、HTML 事件

From&#xff1a;https://blog.csdn.net/WuLex/article/details/101016936 1、页面生命周期 HTML页面的生命周期有以下三个重要事件&#xff0c;每个事件都有特定的用途 DOMContentLoaded &#xff1a; 浏览器已经完全加载 HTML&#xff0c;DOM 树已经构建完毕&#xff0c;js …

腾讯再次海选AI项目,1500进40,医疗零售机器人成新风向

雷刚 发自 凹非寺 量子位 报道 | 公众号 QbitAI一年一度风向标&#xff0c;腾讯又一次海选AI项目。去年第一期腾讯AI加速器结业后&#xff0c;鹅厂就马不停蹄开启了第二期报名&#xff0c;而且这一次报名企业更多、竞争更激烈、最终录取概率甚至不到3%。第二期AI加速器通过初试…

windows2000 日志

引用&#xff1a;http://os.51cto.com/art/201111/302889.htm windows 2000的日志文件通常有应用程序日志&#xff0c;安全日志、系统日志、DNS服务器日志、FTP日志、WWW日志等等&#xff0c;可能会根据服务器所开启的服务不同。当我们用流光探测时&#xff0c;比如说IPC探测&a…