Skip to main content

session丢失,重复登录的解决办法

最近遇到这样一种情况,asp.net的网站换空间之后无论是登陆后台还是新会员的注册,总是需要重新登录,基本上没到一分钟就必须重新登录了。

分析原因,web.config文件没动过,估计是网站空间问题,经过摸索尝试,终于找到了解决办法:

将web.config配置文件中 sessionState 模式由“inProc”改为“StateServer”,然后在服务器中启动“ASP.NET State Service“ 服务即可了。

超时不仅取决于Session.Timeout、web.config,还取决于服务器iis的设定iis默认为7200秒.web.config关于sessionState节点的配置方案,

sessionState有四种模式:off,inProc,StateServer,SqlServer。

1、off模式从字面上就可以看出这个是关闭模式,如果当前页面不需要session的值,为了减少服务器资源,你可以去掉Session的开销。或者页面上来关闭Session。

2、inProc模式(缺省模式)它允许“无Cookie”的会话,以及在服务器之外存储会话数据。ASP.NET会话状态模块在Web.config文件中像下面这样配置:在这个例子中,mode属性设为InProc(默认值),表明会话状态要由ASP.NET存储到内存中,而且不用Cookie来传递会话ID。采取这种方式,不管Cookie还是隐藏表单字段都用不着了。所以,即使网页中没有使用表单,也能加入会话。 但是这种方法,应用程序的状态将依赖于 ASP.NET进程, 当IIS进程崩溃或者正常重启时,保存在进程中的状态将丢失。

3、StateServer会话管理mos将mode属性设为StateServer,也就是将会话数据存储到单独的内存缓冲区中,再由单独一台机器上运行的Windows服务来控制这个缓冲区。状态服务全称是“ASP.NET State Service ”(aspnet_state.exe),计算机管理-服务 里面即可看到此服务,启动该服务j它由Web.config文件中的stateConnectionString属性来配置。该属性指定了服务所在的服务器,以及要监视的端口: 在这个例子中,状态服务在一台名为myserver的机器的42424端口(默认端口)运行。要在服务器上改变端口,可编辑HKLM\SYSTEM\CurrentControlSet\Services\aspnet_state注册表项中的Port值。显然,使用状态服务的优点在于进程隔离,并可在Web farm中共享。 使用这种模式,会话状态的存储将不依赖于iis进程的失败或者重启,然而,一旦状态服务中止,所有会话数据都会丢失。换言之,状态服务不像SQL Server那样能持久存储数据;它只是将数据存储在内存中。

4 用SQL Server进行会话管理 ASP.NET还允许将会话数据存储到一个数据库服务器中,方法是将mode属性变成SqlServer。 在这种情况下,ASP.NET尝试将会话数据存储到由sqlConnectionString属性(其中包含数据源以及登录服务器所需的安全凭证)指定的SQL Server中。为了用恰当的数据库对象来配置SQL erver,管理员还需要创建ASPState数据库,方法是运行WinDir\Microsoft.Net\Framework\Version文件夹中的InstallState.sql脚本(WinDir是服务器的Windows文件夹,而Version是你使用的.NET框架版本的安装文件夹)。

要配置SQL服务器,可以在命令行中运行SQL Server 提供的命令行工具osql.exeosql -S [ server name] -U [user] -P [password]

  iis设置Session超时:

  开始 -> 设置 -> 控制面板 -> 管理工具 -> 计算机管理 -> 服务和应用程序 -> Internet信息服务 -> 默认WEB站点 -> 属性 -> 主目录 -> 配置 -> 应用程序选项 -> 启用会话状态 ->

以下是网上搜集的一些方法:

 一:有些杀病毒软件会去扫描您的Web.Config文件,那时Session肯定掉,这是微软的说法。  
  二:程序内部里有让Session掉失的代码,及服务器内存不足产生的。  
  三:程序有框架页面和跨域情况。  
  第一种解决办法是:使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它)  
  第二种是检查代码有无Session.Abandon()之类的。  
  第三种是在Window服务中将ASP.NET State Service 启动。(sessionStatemode=”StateServer”)

 联系你所购买空间和虚拟主机的公司客服将进程池的内程回收限额增大,可有效解决这个问题。但如果无限增大,可能造成内存不足而导致网站访问速度下降,所以只能适当调整;

阿勋

男,80‘s,不是程序员,稍微懂点CSS/HTML/PS。
我是一名爱生活爱社会爱祖国的三爱青年,也是一名热心网友。
平时喜欢吐槽,偶尔来点幽默。
这就是iaxun.com

发表评论

电子邮件地址不会被公开。