您的位置:首页 > 编程语言 > ASP

通过ASP.NET StateServer实现进程外Session存储

2015-06-03 17:32 711 查看
通过ASP.NET StateServer实现进程外Session存储

我们平常启动浏览器去访问网站经常会涉及到Session的读和写,但是通常的Session是保存在当前的进程中,即访问网站的浏览器进程,如关闭此浏览器,再打开访问,Session就会丢失...

一般长时间保持Session会用到SqlServer数据库的方式存储Session;

但是如何进程间共享Session呢,一般安装了.NET Framework的电脑,在控制面板"程序"中启动IIS的相关.NET Framework框架功能

然后

1.打开注册表,regedit,找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\aspnet_state\Parameters

  a.将AllowRemoteConnection值设置为1 //是否启用远程服务,0为仅Localhost

  [b.将Port值设置为a5b8(十六进制),即十进制42424(默认值)]

2.打开"服务",找到"ASP.NET State Service"服务,启动该服务。(相关exe位置C:\Windows\Microsoft.NET\Framework64\v4.0.30319)

3.在当前web项目的配置文件web.config文件system.web节点下添加
  <sessionState mode="StateServer" stateConnectionString="tcpip=localhost(或远程地址):42424"></sessionState>

[csharp] view
plaincopy

<span style="white-space:pre"> </span>if (Session["Test"] == null)

{

Response.Write("Session星球上暂时还没有人,正在造人~");

Session["Test"] = new Person("小航哥", "男", 18);

}

else

{

Person p = Session["Test"] as Person; <strong><span style="color:#33ff33;"> </span><span style="background-color: rgb(102, 255, 153);">//注意,要使用StateServer保存对象,除了基本类型的数据,其他类对象必须可以序列化[Serializable]</span></strong>

Response.Write(String.Format("Session星球有一个人,他叫{0},{1},{2}岁",p.Name,p.Sex,p.Age));

}

PS:原以为打开浏览器,设置Session后关闭浏览器,再打开Session会保存,但经测试,每次关闭浏览器再打开后会导致Session丢失...但只要浏览器不关闭,即使网站服务器关闭,下次在访问时,Session依然会保持...猜测是新的窗口打开默认判断打开新的对话故丢失Session,具体原因未知...若有人有解决方案,望告知
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: