最近遇到一个问题,就是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不可能因为我一句话就去买个服务器的,所以,只好另辟蹊径了……