首页 > 代码库 > ASP.NET:关于session超时和丢失问题

ASP.NET:关于session超时和丢失问题

最近遇到一个问题,就是session超时的问题,其实一开始我想的是很简单的,直接在程序里写道
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Session.Timeout = 120;
        }
    }
 其实我不知道这样管用不管用,百度了下,好像是需要设置webconfig的,这样好像不行,所以又找到一种方法

1  <sessionState mode="InProc" cookieless="false" timeout="60"></sessionState>
 这个是可以解决超时问题的,但是这个极不安全,vs.net默认设置
 相当于把session交给IIS的进程管理,IIS的不稳定性将导致Session频繁丢失
 
2 sessionState mode=‘StateServer‘是建立独立的Session的服务进程管理方式模式,
 这样不受IIS的进程本身的不稳定影响,不容易导致session丢失,
 这样可以实现多个asp.net的站点的session 共享。
 
 然后我考虑这个方法,重新设置了一下webconfig
 <sessionState mode="StateServer"
      stateConnectionString="tcpip=127.0.0.1:42424"
      cookieless="false"
      timeout="60"/>
   但是这个要启动一个服务的,管理工具-服务-ASP.NET state service 启动就好了。
   在本机是没有什么问题的,但是传到服务器,问题就出现了,这个IP和端口问题,不知道该怎么修改。
  其实这个方法算是可以了,但是我们这里只有虚拟主机,没有自己的服务器,所以我没有办法启动服务器上的这个服务,只好作罢。
 
  其实也许可以设置,就是要换成服务器的IP,但是还要修改端口:

  aspnet_state的服务端口的修改:
  aspnet_state端口编辑    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters注册表项中的Port值。
   但是我不太懂,要怎么样具体操作的,所以暂时放下了。
3 同时还有一种方式是将session保存到数据,。即便服务重新启动,session也不会丢失。网站的稳定性还是比较重要的。微软的默认设置是最差的。 
   这个方式没有研究的,因为公司一直要求我用的access的。
这是这三个属性的具体描述

InProc 会话值在 ASP.NET 辅助进程(Microsoft? Windows Server? 2003 中的 aspnet_wp.exew3wp.exe)的内存中保持为活动对象。这是默认选项。
StateServer 会话值被序列化并存储在单独进程 (aspnet_state.exe) 的内存中。该进程还可以在其他计算机上运行。
SQLServer 会话值被序列化并存储在 Microsoft? SQL Server? 表中。SQL Server 的实例可以在本地运行,也可以远程运行。



但是还是要修改的,只好采用了第一种方法,其实都是因为硬件原因导致这些东西,boss不可能因为我一句话就去买个服务器的,所以,只好另辟蹊径了……

ASP.NET:关于session超时和丢失问题