Session有什么重大BUG,有什么方法可以解决

【考点】
ASP.NET中Session的多种保存方法。
【出现频率】
★★★☆☆
【解答】
使用进程内会话状态模式时,如果aspnet_wp.exe或应用程序域重新启动,则会话状态数据将丢失。可以用Sate server或SQL Server数据库的方式存储Session的名称/值对集合,不过这些方式效率稍低,并且无法捕获Session的END事件。
【分析】
本题主要考查面试者是否能解决Session丢值问题,因为aspnet_wp.exe进程或应用程序域重新启动时,会导致Session数据的丢失。引发这种情况的原因可能为:
      修改了Global.asax文件。
    修改了Web.config文件。
     更改WEB应用程序的bin目录路径。
    杀毒软件扫描(可能发生修改)了Global.asax 文件、Web.config文件或Web应用程序的Bin目录下的文件。
      在Web.config配置文件的<processModel>元素中,可设置导致新进程在条件被满足时启动的属性,不过这并不属于BUG。
在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”属性,其取值可以为“InProc”、“StateServer”和“SQLServer”,默认值为“InProc”。默认值就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),在系统发生某些意外事件时该进程可能会重启,所以造成了存储在该进程内的Session丢失。相对而言,如果“mode”属性取值为“StateServer”或“SQLServer”,即可避免进程重启后丢失Session值的情况,因为这两种方法存储Session值是进程外的。
首先将“mode”属性修改为“StateServer”。StateServer是本机的一个网络服务,在服务管理器中可以看到这个名为“ASP.NET State Service”的服务,默认情况是不启动的。如果要使用StateServer方式存储Session值,当“mode”属性修改为“StateServer”之后,编程者需要启动“ASP.NET State Service”的服务。在单击Windows XP操作系统的“开始”菜单,选择“运行”命令,输入“services.msc”,然后单击“确定”按钮即可打开服务管理器,找到如图11.3所示的网络服务,并启动该服务。

图11.3  启动ASP.NET State Service服务
除了使用图形化界面启动该服务,还可以在命令行中输入以下代码所示的命令,以启动该服务。
net start aspnet_state
现在,编程者即可利用本机的StateServer方式来存储Session值了,除非服务器重启或者“ASP.NET State Service”服务停止,否则Session值可以在超时时间内稳定地存在。编程者还可以将Session值通过其他电脑的“ASP.NET State Service”服务来保存,只需要在<sessionState />元素中修改“stateConnectionString”的属性,将IP地址修改为其他的电脑,并在其他电脑上启动“ASP.NET State Service”服务即可。通过这种操作,编程者就可以使位于不同服务器上的ASP.NET应用程序共用Session值。
如果WEB应用程序要求Session值具有更好的持久性和可靠性,即使服务器重启后Session值仍然不丢失,可以将“mode”属性修改为“SQLServer”。不仅如此,还需要修改sqlConnectionString属性,以确保正确地连接SQLServer数据库。微软提供了SQL脚本文件以创建存储Session值的数据库,该数据库名为ASPState,包含了大量被ASP.NET运行库调用的资源(如存储过程等)。把Session值存储于数据库中虽然可靠,但速度较慢。
说明:使用非进程内方法存储Session值应确保HttpSessionState对象内的自定义类型是可序列化的,即类型被标记了[Serializable]特性。

转:http://blog.163.com/[email protected]/blog/static/372897692009630104445136/

原文地址:https://www.cnblogs.com/love201314/p/8496158.html

时间: 2024-10-12 14:23:01

Session有什么重大BUG,有什么方法可以解决的相关文章

[Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法

1.U3D经常莫名奇妙崩溃.   一般是由于空异常造成的,多多检查自己的引用是否空指针. 2.编码切换警告提示.   警告提示:Some are Mac OS X (UNIX) and some are Windows. This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings men

IE常见bug及其修复方法

    一.双边距浮动的bug 1.1一段无错的代码把一个居左浮动(float:left)的元素放置进一个容器盒(box) 2.1在浮动元素上使用了左边界(margin-left)来令它和容器的左边产生一段距离 在ie6或更低版本中产生双倍外边距 修复方法 在浮动元素上添加display:inline属性即可     二.3像素文本偏移bug 2.1 一段文本与浮动元素相邻的时候,会出现图文环绕,为了不让其文本环绕左边floatBox浮动盒子,我们设置段落外左边距margin-left为floa

ThinkPHP 3.2.2 重写BUG ,修正方法

TP3.2.x问题真多,官网根本就不维护了,很多时候TP官网都根本无法下载TP. 一个很严重的BUG,网址重写无法支持原因ThinkPHP本来就根本执行顺序全错! 解决方法: 文件: #D:\PC\zbphp.com\ThinkPHP\Library\Think\Dispatcher.class.php 代码:(替换成下面的即可 by default7#zbphp.com) if(empty($_SERVER['PATH_INFO'])) { $_SERVER['PATH_INFO'] = ''

Android 5.0原生bug及修复方法

Android 5.0已经来了,这个版本改动非常大,也意味着会有更多的bug隐藏在其中,我会在这篇文章中一直更新自己遇到的原生bug及修复方法. 1.bug1 现象:5.0中ActivityManagerService.keyguardWaitingForActivityDrawn ()接口替换了4.4中ActivityManagerService.dismissKeyguardOnNextActivity()接口,但是带来了一个显示bug,现象是keyguard隐藏后activity窗口还没显

Session id实现通过Cookie来传输方法及代码参考

1. Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念. 需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间.A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session. session的工作原理 (1)当一个session第一次被启用时,

MySQL笔记-最简单的方法来解决找不到mysqld.sock文件的问题

首先,环境:ubuntu 14.04,采用apt-get的方式安装的,手动安装可能路径设置稍有区别. 1.安装MySQL后,用命令行首次启动时发现找不到Mysqld.sock文件,提示: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2),如图: 2.网上的方法很多不实用,这里介绍一种最简单的方法来解决这个问题. # sudo /etc/i

对于大流量的网站,您采用什么样的方法来解决访问量问题?

当一个网站发展为知名网站的时候(如新浪,腾讯,网易,雅虎),网站的访问量通常都会非常大,如果使用虚拟主机的话,网站就会因为访问量过大而引起 服务器性能问题,这是很多人的烦恼,有人使用取消RSS等错误的方法来解决问题,显然是下错药,那么对于大流量的网站,需要采用什么样的方法来解决访问量 问题? 解决方法参考如下: 首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大,那么必须首先配置一台更高性能的专用服务器才能解决问题,否则怎么优化

WPF Popup全屏 弹出方法。解决只显示75%的问题。

WPF Popup全屏 弹出方法.解决只显示75%的问题. WPF 中 Popup 有一个特点.当Popup的高度超过屏幕的75%的时候,只显示75%的高度. 如下代码: <Window x:Class="WpfApplication13.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.micro

转:【WebDriver】封装GET方法来解决页面跳转不稳定的问题

在大多数测试环境中,网络或者测试服务器主机之间并不是永远不出问题的,很多时候一个客户端的一个跳转的请求会因为不稳定的网络或者偶发的其它异常hang死在那里半天不动,直到人工干预动作的出现.      而WebDriver测试执行时,偶然也会因此发生页面跳转或者加载的超时异常,而使得流程性的测试中断,给测试完整性和有效性带来很大的损失.其实这种问题很好解决,只需要重写或者封装一下GET方法来实现跳转就行了.      在做这个封装之前,我们得事先讲一下driver.get(url)和driver.

中文后乱码问题的解决方法(可能解决)

用 Sublime Text 2 保存中文后乱码问题的解决方法(可能解决) https://blog.twofei.com/blog iconv字符编码转换 UTF-8 UCS-2(LE/BE) GBK 在群里面听到有人说起有一款新的编辑器 Sublime Text 2 很不错, 于是我下载下来试用了一下, 发现不支持中文, 听说要安装什么插件, 不管了, 没打算用, 但... 我打开了我的一个源代码C文件, 突然发现了一点小错误, 就用ST2修改后Ctrl+S保存了, 当时没在意什么, 到了几