background image

stateConnectionString='tcpip=127.0.0.1:42424'属性,其中有个 ip 地址,默认为
本机(127.0.0.1),你可以将其改成你所知的运行了 StateService 服务的电脑 IP,这
样就可以实现位于不同电脑上的 Asp.net 程序互通 Session 了。

如果你有更高的要求,需要在服务期重启时 Session 也不丢失,可以考虑将 mode

设定成 SQLServer,同样需要修改 sqlConnectionString 属性。关于使用 SQLServer 保
存 Session 的操作,请访问这里。

在使用 StateServer 或者 SQLServer 存储 Session 时,所有需要保存到 Session

的对象除了基本数据类型(默认的数据类型,如 int、string 等)外,都必须序列化。只需
将[Serializable]标签放到要序列化的类前就可以了。

如:

[Serializable]

public class MyClass

{

......

}

具体的序列化相关的知识请参这里。

至此,ASP.NET Session 丢失问题解决。

关于 asp.net Session 丢失问题的总结 

asp 中 Session 的工作原理:

asp 的 Session 是具有进程依赖性的。ASP Session 状态存于 IIS 的进程中,也就是

inetinfo.exe 这个程序。所以当 inetinfo.exe 进程崩溃时,这些信息也就丢失。另外,重
起或者关闭 IIS 服务都会造成信息的丢失。

asp.net Session 的实现

asp.net 的 Session 是基于 HttpModule 技术做的,HttpModule 可以在请求被处

理之前,对请求进行状态控制,由于 Session 本身就是用来做状态维护的,因此用
HttpModule 做 Session 是再合适不过了。

原因 1:

bin 目录中的文件被改写,asp.net 有一种机制,为了保证 dll 重新编译之后,系统

正常运行,它会重新启动一次网站进程,这时就会导致 Session 丢失,所以如果有
access 数据库位于 bin 目录,或者有其他文件被系统改写,就会导致 Session 丢失

原因 2:

文件夹选项中,如果没有打开 在单独的进程中打开文件夹窗口 ,一旦新建一个窗

口,系统可能认为是新的 Session 会话,而无法访问原来的 Session,所以需要打开该
选项,否则会导致 Session 丢失