Session的SqlServer模式的配置

  很多时候,由于各种莫名其妙的原因,会导致session丢失。不过ASP.NET还允许将会话数据存储到一个数据库服务器中,方法是将mode属性变成SqlServer。 在这种情况下,ASP.NET尝试将会话数据存储到由sqlConnectionString属性(其中包含数据源以及登录服务器所需的安全凭证)指定的SQL Server中,这样能够保证session丢失的问题。


1、  配置ASPState session 数据库

在命令行下运行如下命令:aspnet_regsql.exe  -ssadd -sstype p -S <SQL Server IP> -U <User Name> -P <Password>

 

该命令对此应用进行了持久化操作。这时会看到多一个ASPState数据库,里面两张表,ASPStateTempSessions就可以用来保存Session。

注:<SQL Server IP>为数据库实例名,<User Name>为sa(或与sa同等权限的),<Password> 为 sa用户名的密码


2、应用时,需要在webconfig中添加如下配置:

配置节点如下:
<sessionState mode="SQLServer" sqlConnectionString="data source=<Server IP>;database=<Database Name>;uid=<UserName>;password=<Password>;"cookieless="false" timeout="20" />

 

虽然timeout设置的是20分钟但是 过期以后仍然可以获取到session的值。


3. 项目应用

1. 新建项目 web项目,在加入如下代码:

Session["SessionID"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Response.Write(Session["SessionID"]);

2. web.config 中增加sessionState 配置

<sessionState mode="SQLServer" timeout="40" allowCustomSqlDatabase="false" sqlConnectionString="data source=xxx;uid=sa;password=sasa"/>

3. 运行该网站,之后查看数据库ASPState中的数据表ASPStateTempSessions增加了一条数据

 

注意:只有在写session 的时候,才会在ASPStateTempSessions表里增加了一条session记录。

1. SessionId包括两个部分:网站生成的24位SessionID及8位AppID,AppName对于不同的站点,其AppName不同,在能够在不同站点下使24位SessionID相同的情况下。

2. Created和Expires是这个Session的创建日期和有效期 这个有效期是根据配置文件中TimeOut算出来的,虽然时间达到有效期了 但是还能获取到session(不知道这个有效期有什么用,但是用SqlServer的Session的模式 就是为了不掉线,这点也符合了这个初衷)

3. LockData与LockDataLocal都是最后一次更新Session的时间 (每次操作该Session的时候,它的有效期都会改变)。

4. TimeOut是配置文件中配置的超时分钟数(这里的1是我测试超时时间的时候临时在配置文件中改的,默认是20).

5. SessionItemShort是真正的Session的内容,数据类型是varbinary(7000),存的内容可以是int string 等常用类型,如果是集合或是对象,则必须是可序列化的([Serializable]可序列化的属性)。

 

注意:要设置Session过期删除,启动SQL server 代理中的作业完成。

 




 


作者:章为忠 
出处:http://www.fpeach.com/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以邮件:417114764@qq.com  微博:章为忠 QQ:417114764  联系我,非常感谢。 

扫下面的二维码关注我的微信公众号。 
img_8bfdf26d767ebd48b558aa6630702c37.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值