日期:2014-05-17  浏览次数:20546 次

session 过期问题
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"
  cookieless="false" timeout="15" />

我想让session在15分钟后过期,但是不好使,指点一下具体是怎么个情况

------解决方案--------------------
  mode="InProc" 
  stateConnectionString="tcpip=127.0.0.1:42424" 
  sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" 
  cookieless="false" 
  timeout="20" /> 
服务器Session信息存储在进程外 

打开管理工具->服务,找到名为:ASP.NET State Service的服务,启动它。 
实际上,这个服务就是启动一个要保存Session信息的进程。 
启动这个服务后,你可以从Windows任务管理器->进程中看到一个名为aspnet_state.exe的进程,这个就是我们保存Session信息的进程。 

然后,回到Web.config文件中上述的段落中,将mode的值改为StateServer。 
保存文件后的重新打开一个IE,打开SessionState.aspx页面,保存一些信息到Session中。 
这时,让我们重起IIS,再回到SessionState.aspx页面中查看刚才的Session信息,发现没有丢失。 

实际上,这种将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外,还可以将Session信息存储在其他的服务器的进程中。 
这时,不光需要将mode的值改为StateServer,还需要在stateConnectionString中配置相应的参数。 
例如你的计算你是192.168.0.1,你想把Session存储在IP为192.168.0.2的计算机的进程中,就需要设置成这样 
stateConnectionString="tcpip=192.168.0.2:42424"。 
当然,不要忘记在192.168.0.2的计算机中装上.NET Framework,并且启动ASP.NET State Services服务。 

将服务器Session信息存储在SQL Server中 

启动SQL Server和SQL Server代理服务。 
在SQL Server中执行一个叫做InstallSqlState.sql的脚本文件。 
这个脚本文件将在SQL Server中创建一个用来专门存储Session信息的数据库 
及一个维护Session信息数据库的SQL Server代理作业。 
我们可以在以下路径中找到那个文件: 
[system drive]\winnt\Microsoft.NET\Framework\[version]\ 

然后打开查询分析器,连接到SQL Server服务器,打开刚才的那个文件并且执行。 
稍等片刻,数据库及作业就建立好了。 
这时,你可以打开企业管理器,看到新增了一个叫ASPState的数据库。 
但是这个数据库中只是些存储过程,没有用户表。 
实际上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中的 
另外一个ASPStateTempApplications表存储了ASP中Application对象信息。 
这两个表也是刚才的那个脚本建立的。 
另外查看管理->SQL Server代理->作业,发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业 
这个作业实际上就是每分钟去ASPStateTempSessions表中删除过期的Session信息的。 

接着,我们返回到Web.config文件,修改mode的值改为SQLServer。 
注意,还要同时修改sqlConnectionString的值,格式为: 
sqlConnectionString="data source=localhost; Integrated Security=SSPI;" 
其中data source是指SQL Server服务器的IP地址,如果SQL Server与IIS是一台机子,写127.0.0.1就行了。 
Integrated Security=SSPI的意思是使用Windows集成身份验证 
这样,访问数据库将以ASP.NET的身份进行 
通过如此配置,能够获得比使用userid=sa;password=口令的SQL Server验证方式更好的安全性。 
当然,如果SQL Server运行于另一台计算机上,你可能会需要通过Active Directory域的方式来维护两边验证的一致性。 
Session信息存在SQL Server中,即使你重起计算机,刚才的Session信息也不会丢失。