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

来源:互联网 发布:unity3d 外发光shader 编辑:程序博客网 时间:2024/06/06 16:31

通过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
  1. <span style="white-space:pre">    </span>if (Session["Test"] == null)  
  2.         {  
  3.             Response.Write("Session星球上暂时还没有人,正在造人~");   
  4.             Session["Test"] = new Person("小航哥""男", 18);  
  5.         }  
  6.         else  
  7.         {  
  8.             Person p = Session["Test"as Person;    <strong><span style="color:#33ff33;"> </span><span style="background-color: rgb(102, 255, 153);">//注意,要使用StateServer保存对象,除了基本类型的数据,其他类对象必须可以序列化[Serializable]</span></strong>  
  9.             Response.Write(String.Format("Session星球有一个人,他叫{0},{1},{2}岁",p.Name,p.Sex,p.Age));  
  10.         }  


PS:原以为打开浏览器,设置Session后关闭浏览器,再打开Session会保存,但经测试,每次关闭浏览器再打开后会导致Session丢失...但只要浏览器不关闭,即使网站服务器关闭,下次在访问时,Session依然会保持...猜测是新的窗口打开默认判断打开新的对话故丢失Session,具体原因未知...若有人有解决方案,望告知
0 0