造成session域对象丢失,session取不到的原因

http://www.itjxue.com  2023-01-07 14:47  来源:未知  点击次数: 

C# 页面跳转Session丢失

win2003

server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失。

因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失。

解决办法:

修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收

该进程。通过使用默认应用程序池,可以确保多个应用程序间互相隔离,保证由于一个应用程序的崩溃不会影响另外的Web应用程序。还可以使一个独立的应用程序运行在一个指定的用户帐号特权之下。

如果使用StateServer方式或者Sql

Server数据库方式来保存Session,则不受该设置的影响。

可能的原因2:

系统要运行在负载平衡的

Web

场环境中,而系统配置文件web.config中的Session状态却设置为InProc(即在本地存储会话状态),导至在用户访问量大时,Session常经超时的情况。引起这个现象的原因主要是因为用户通过负载平衡IP来访问WEB应用系统,某段时候在某台服务器保存了Session的会话状态,但在其它的WEB前端服务器中却没有保存Session的会话状态,而随着并发量的增大,负载平衡会当作路由随时访问空闲的服务器,结果空闲的服务器并没有之前保存的Session会话状态。

解决办法:

1.当您在负载平衡的

Web

场环境中运行

ASP.NET

Web

应用程序时,一定要使用

SqlServer

StateServer

会话状态模式,在项目中我们基于性能考虑并没有选择SqlServer模式来存储Session状态,而是选择一台SessionStateServer

服务器来用户的Session会话状态。我们要在系统配置文件web.config中设置如下:

sessionState

mode="StateServer"

cookieless="false"

timeout="240"

stateConnectionString="tcpip=192.168.0.1:42424"

stateNetworkTimeout="14400"

/

还要添加一项

machineKey

validationKey="78AE3850338BFADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4"

decryptionKey="5FC88DFC24EA123C"

validation="SHA1"/

2.

我们同时还要在SessionStateServer

服务器中启动ASP.NET

State

Service服务,具体设置:控制面板管理工具服务ASP.NET

State

Service,把它设为自动启动即可。

3.

每台前端WEB服务的Microsoft“Internet

信息服务”(IIS)设置

要在

Web

场中的不同

Web

服务器间维护会话状态,Microsoft“Internet

信息服务”(IIS)

配置数据库中

Web

站点的应用程序路径(例如,\LM\W3SVC\2)与

Web

场中所有

Web

服务器必须相同。大小写也必须相同,因为应用程序路径是区分大小写的。在一台

Web

服务器上,承载

ASP.NET

应用程序的

Web

站点的实例

ID

可能是

2(其中应用程序路径是

\LM\W3SVC\2)。在另一台

Web

服务器上,Web

站点的实例

ID

可能是

3(其中应用程序路径是

\LM\W3SVC\3)。因此,Web

场中的

Web

服务器之间的应用程序路径是不同的。我们必须使Web

场Web

站点的实例

ID

相同即可。你可以在IIS中把某一个WEB配置信息保存为一个文件,其他Web

服务器的IIS配置可以来自这一个文件。您如果想知道具体的设置请访问Microsoft

Support网站。

asp.net的session部署到iis上Session要丢失 怎么办?

asp.net Session的实现

asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。

原因1:

bin目录中的文件被改写,asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失

原因2:

文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失

原因3:

似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开

原因4:

Session的时间设置是不是有问题,会不会因为超时造成丢失

原因5:

IE中的cookie数量限制(每个域20个cookie)可能导致session丢失

原因6:

使用web garden模式,且使用了InProc mode作为保存session的方式

解决丢失的经验

1. 判断是不是原因1造成的,可以在每次刷新页面的时候,跟踪bin中某个文件的修改时间

2. 做Session读写日志,每次读写Session都要记录下来,并且要记录SessionID、Session值、所在页面、当前函数、函数中的第几次Session操作,这样找丢失的原因会方便很多

3. 如果允许的话,建议使用state server或sql server保存session,这样不容易丢失

4. 在global.asa中加入代码记录Session的创建时间和结束时间,超时造成的Session丢失是可以在SessionEnd中记录下来的。

5. 如果有些代码中使用客户端脚本,如javascript维护Session状态,就要尝试调试脚本,是不是因为脚本错误引起Session丢失

浏览器session丢失,会是什么原因造成的?

你具体什么意思呢?是不是你放在session中的数据,用session.getAttribute("data");这个方法查不出来了?

那可能是session失效了,或者你打开了新窗口,已经不是一个session,发给你概念看看,不了解再问我吧。

1、 在某段时间一连串客户端与服务器的“交易”

2、 在JSP/SERVLET中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid = 1234

3、 可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。

4、 通过HttpSession来读写Session

5、 Session值永远是独一无二的,若新开一窗口(非本窗口的子窗口)session值立即改变

session丢失是什么原因

可能以下几个原因:

1、session超时时间到了

2、服务器端网站重启了

3、禁用了cookie

4、浏览器原因(这个因素也有)

(责任编辑:IT教学网)

更多

推荐Access文章