ASP.NET Session丢失问题原因及解决方案[转]

不得不老调重弹

正常操作情况下会有ASP.NET Session丢失的情况出现。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成60分钟,不会这么快就超时的。

现在我就把原因和解决办法写出来。

ASP.NET Session丢失原因:

由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:

< sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' timeout='60'/>

我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?SQLServer(大小 写敏感) 。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不 稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。

哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:

1、配置文件中processModel标签的memoryLimit属性

2、Global.asax或者Web.config文件被更改

3、Bin文件夹中的Web程序(DLL)被修改

4、杀毒软件扫描了一些.config文件。

更多的信息请参考PRB: Session variables are lost intermittently in ASP.NET applications

ASP.NET Session丢失解决办法:

前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。这两种存Session的方法都是进程外的,所以当aspnet_wp.exe重起的时候,不会影响到Session。

现在请将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定mode为StateServer之后,请手工将该服务启动。

这样,我们就能利用本机的StateService来存储Session了,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。

除此之外,我们还可以将Session通过其他电脑的StateService来保存。具体的修改是这样的。同样还在sessionState标签 中,有个stateConnectionString='tcpip=127.0.0.1:42424'属性,其中有个ip地址,默认为本机 (127.0.0.1),你可以将其改成你所知的运行了StateService服务的电脑IP,这样就可以实现位于不同电脑上的Asp.net程序互通 Session了。

如果你有更高的要求,需要在服务期重启时Session也不丢失,可以考虑将mode设定成SQLServer,同样需要修改sqlConnectionString属性。关于使用SQLServer保存Session的操作,请访问这里。

在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。

如:

[Serializable]

public class MyClass

{

......

}

具体的序列化相关的知识请参这里。

至此,ASP.NET Session丢失问题解决。

关于asp.net Session丢失问题的总结

asp中Session的工作原理:

asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。

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的方式

ASP.NET 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丢失

from:http://developer.51cto.com/art/200907/138676.htm 

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/archive/2010/12/21/1912422.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux内核_Linux内核编程风格简介

01不同的语言风格当今世界上一共有5000多种语言。不同的国家、民族和地区&#xff0c;说着不同的语言。每个民族不一定有自己的文字&#xff0c;但一般都会有自己的语言。即使是同一种语言&#xff0c;在不同的时代、不同的地区和群体&#xff0c;说话的方式和语言风格也各不相…

Swift使用CoreLocation,你必须要看这一篇

CoreLocation&#xff0c;在我们这里讨论的是一个最常用的东西&#xff0c;就是用Location Manger获取用户当前的位置。 整个的来说非常简单。只要这样&#xff1a; import CoreLocation需要使用整个框架&#xff0c;那么引入整个框架就是必须的。然后需要在你的类里实现一个pr…

python全景图像拼接_Python+OpenCV实现图像的全景拼接

本文实例为大家分享了PythonOpenCV实现图像的全景拼接的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 环境&#xff1a;python3.5.2 openCV3.4 1.算法目的 将两张相同场景的场景图片进行全景拼接。 2.算法步骤 本算法基本步骤有以下几步&#xff1a; 步骤1&#x…

非你莫属 java全球排名_TIOBE:2018年5月全球编程语言排行榜

原标题&#xff1a;TIOBE&#xff1a;2018年5月全球编程语言排行榜TIOBE 刚刚发布了 5 月编程语言排行榜。Scala 经过长时间的沉淀&#xff0c;本月终于进入了 TIOBE 榜单的前 20 名。Scala 是一种 JVM 上运行的函数式编程语言&#xff0c;可与 Java 一起或作为 Java 的替代品使…

人生中最【无用】的二十件事

学会取舍&#xff0c;将是你人生的必修课。 丢掉这20件东西&#xff0c;你一定会成为更好的自己 我们之所以会觉得活的痛苦&#xff0c;活的乏味&#xff0c;根源在于你始终无法做到潇洒的放手。顾忌太多&#xff0c;想要的太多&#xff0c;最终一无所获。 你从幼稚走向成熟的过…

python动态方法_python中的动态方法生成

这是一个元类&#xff0c;它将__getattr__函数从类定义添加回元类本身。这就避免了在多个地方定义函数&#xff0c;或者作为预先定义并单独添加到元类和类中的单独全局函数来定义。在class Meta(type): def __new__(mcls, name, bases, dikt): fgetattr dikt.get(__getattr__)…

java光标位置无效_ResultSet.getString(1)引发java.sql.SQLException:当前光标位置的无效操作...

当我运行以下servlet时&#xff1a;// package projectcodes;public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {String UserID request.getParameter("UserID");String UserPassword request.g…

python web服务器 apache_Windows下搭建Apache+Django+Python Web服务环境

最近在学Django&#xff0c;想用Apache搭建一个服务器环境&#xff0c;因此在网上看了好多资料&#xff0c;很多都是用Python2.6和Apache2.2搭建的环境&#xff0c;不过我还是想用Python35和Apache24来搭建&#xff0c;具体环境如下&#xff1a; 参考资料&#xff1a; Apache配…

Python_List对象内置方法详解

前言 在上一篇中介绍了Python的序列和String类型的内置方法&#xff0c;本篇继续学习作为序列类型成员之一的List类型的内置方法。 软件环境 系统 UbuntuKylin 14.04软件 Python 2.7.3IPython 4.0.0列表List 列表是一种容器&#xff0c;存放内存对象的引用。即是任意内存对象的…

java删除javaee_JavaEE--集合--删除List中指定元素

一、Java 循环删除list中指定元素增强for循环删除指定元素Testpublic void test(){String[] strs{"a", "b", "c", "f", "b", "e", "d"};Listlist new ArrayList<>(Arrays.asList(strs));for (St…

无法从传输连接中读取数据:远程主机强迫_电力远程抄表中的应用

系统概述锐谷智联无线传输终端设备DT7710S&#xff0c;实现远程抄表应用。系统构成通过使用DT7710S&#xff0c;实现电表、水表等数据实时向中心传输。供应商可以通过数据中心的快速读取数据节省人力和时间。项目描述工业自动化的发展&#xff0c;远程抄表已成为智能电网系统中…

python定义变量名的时候、需要注意问题_python中将函数赋值给变量时需要注意的一些问题...

前言 本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍&#xff1a; 见过两种函数赋值给变量的形式&#xff0c;一种是 af 另一种是 af() 这两种形式是有…

vmware nat模式网络不通_【EVENG入门】 03EVENG网络运行环境(桥接模式、NAT模式、Cloud连接虚拟设备)...

EEmulated&#xff0c;模拟VVirtual&#xff0c;虚拟EEnvironment&#xff0c;环境NNext&#xff0c;下一个GGeneration&#xff0c;一代也就是EVE-NG下一代模拟器虚拟环境当然&#xff0c;EVE也是黄昏&#xff0c;NG就是女鬼了EVE-NG黄昏的女鬼演示视频在此操作文档在此以下是…

金融行业 | 电子银行系统性能优化解决方案

随着互联网金融的蓬勃发展&#xff0c;以及来自支付宝等新兴网络金融机构的强大冲击&#xff0c;传统银行业纷纷加大对手机银行和网络银行等电子银行业务的投入力度&#xff0c;用户也从网银时代的足不出户转账付款发展到今天随时随地通过手机获取各种金融服务&#xff0c;前端…

python安装gz文件_python tar.gz怎么安装-问答-阿里云开发者社区-阿里云

Windows环境&#xff1a; 安装whl包&#xff1a;pip install wheel -> pip install **.whl 下载whl文件 MySQL_python-1.2.5-cp27-none-win32.whl MySQL_python-1.2.5-cp27-none-win_amd64.whl 执行pip install MySQL_python-1.2.5-cp27-none-win32.whl 如果是安装64位的&am…

Erlang/Elixir 社区摘要: 2016-05-21

Elixir 雷达, 49期 https://app.rdstation.com.br/mail/336031fa-3fe3-4d59-b05b-a86f8affa7c9如何使用环境变量来配置Exrm发布的应用 http://blog.plataformatec.com.br/2016/05/how-to-config-environment-variables-with-elixir-and-exrm/Merkle Trees in Elixir Merkle Tre…

git master主分支_Git分支管理策略及简单操作

前几天整理了一下之前项目的开发代码&#xff0c;当时使用了Git来进行代码版本管理。虽然本人熟悉常用的Git操作&#xff0c;但是对分支的管理经验非常欠缺。拿这个项目来说&#xff0c;在项目中有不下20个分支&#xff0c;每个分支间的继承关系相当之混乱&#xff0c;非常不利…

PAT (Advanced Level) 1038. Recover the Smallest Number (30)

注意前导零的消去。 #include <iostream> #include <string> #include <sstream> #include <algorithm> using namespace std;string s[1000010]; int n;bool cmp(const string &a, const string &b) {return ab<ba; }int main() {cin>&…

java在什么环境变量_Java-环境变量

很多同学不太明白环境变量的到底是什么具体有什么用? 这里阿风为不太明白的同学介绍一下.首先我们打开环境变量的位置.,这里以win10系统作为介绍在桌面邮件属性,如下然后点击高级系统变量接着点击环境变量然后你就能看到环境变量的具体设置界面了如图所示,环境变量分为用户变量…

git rebase用法_Git入门实战

如果给所有软件列出一个排行榜的话&#xff0c;那么Git定会名列前茅。Git对于代码项目的管理是具有划时代意义的&#xff0c;向Linus致敬&#xff0c;不但写出了可以与Windows争锋的Linux系统&#xff0c;还设计实现了如此强大的版本管理工具。当我了解Git后&#xff0c;真后悔…