关于session丢失值的问题

在网站上找到这个 还不错 备用session的问题

我以前也遇到过。楼主看看我写的个人总结里面的描述是不是和你的一样。
问题描述:
在本地搭建的服务器上测试系统时,一切正常。但是上传至服务器上以后,以正常的账户登录,发现经常出现无缘无故被弹出至登录界面的问题,在系统中采用的是session来保存用户的登录名,权限等信息。仔细检查所有代码后发现,只有在session不存在或不具有某种权限的用户访问了需要该权限才能访问的页面的情况下才会被系统弹出登录界面。我们又以admin超级管理员账户登录,该账户拥有系统所有的权限,但是仍然存在该问题,因此不可能是因为权限不正确而被弹出系统的。
我们又猜测可能是因为session失效时间过短引起该问题。但是检查后发现,在服务器默认设置中,session失效时间是20分钟,即鼠标键盘无动作20分钟后session将自动失效,session失效后系统将不能登录,为了验证是否是session超时而被弹出,我们在实际测试中不停的操作,但是仍然存在该问题,登录系统后最短时间几秒,最长时间不过几分钟即会被弹出系统,因此不可能是因为session超时引起的。
鉴于在本地服务器上测试无任何问题,因此应该与服务器有一定关系。通过咨询服务器管理老师,发现在该服务器上托管了大量网站,而这些网站的日常访问量均比较多,各个网站的访问量加起来是巨大的,因此我们猜测可能是因为session的存储模式引起的该问题。通过查询资料得知,ASP.NET中Session的存储模式有以下三种:
1、InProc
session存储在进程内,即inetinfo.exe这个进程中。
2、SQLServer
会话状态将使用进程外 SQL Server 数据库来存储状态信息。
3、StateServer
会话状态将使用进程外 ASP.NET 状态服务来存储状态信息。
而IIS默认是以InProc方式来存储session的,即存储在 IIS进程中,也就是inetinfo.exe这个进程。当inetinfo.exe进程不稳定或崩溃时,这些信息也就会丢失。另外,当IIS关闭,重启时Session信息也会丢失。
通过分析,我们认为可能是因为该服务器上网站过多,频繁的网站访问使inetinfo.exe这个进程不稳定从而导致了session的丢失从而被弹出系统。

解决方法:
我们更改了session的存储方式,以StateServer服务方式来存储session,并开启了远程服务器上的stateserver服务,修改后测试时再也没有出现这个被弹出系统的问题。问题得到解决。

而session的状态又怎样更改呢?

<sessionState mode="Off|InProc|StateServer|SQLServer"

cookieless="true|false"

timeout="number of minutes"

stateConnectionString="tcpip=server:port"

sqlConnectionString="sql connection string"

stateNetworkTimeout="number of seconds"

/>

这个还真不错...学习学习!!!

你可能感兴趣的:(session)