sessionState 为什么用DB保存Session

本文介绍了ASP.NET中Session的默认配置及存储方式,并探讨了不同模式下Session的状态保持方法。包括InProc、StateServer和SQLServer模式的特点,以及如何通过设置避免Session丢失的问题。
由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:
<sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' timeout='60'/>

我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?SQLServer(大小写敏感) 。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。

如果将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定mode为StateServer之后,请手工将该服务启动。

这样,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。

在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。
如:
[Serializable]
public class MyClass
{
......
}
回答者: 三根鞋带 - 总监 八级 8-22 10:48
如果个别页面太久(写的资料太多可以采用把session转成变量.)或者直接用ajax每隔一段时间访问一次服务器来达到检测客户端是否进行操作.
回答者: coolbreeze5588 - 举人 四级 8-22 10:55
这个问题不是怎么好解决,在WEB开发中尽量少用这个东西
回答者: xydlmnn - 总监 九级 8-22 11:47
解决方案是:用ajax间隔和服务器交互(比如,5分钟交互一次)~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值