【考点】
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/yds666666@126/blog/static/372897692009630104445136/

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

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

    http://www.58player.com/blog-635-128.html [Unity3D]引擎崩溃.异常.警告.BUG与提示总结及解决方法   此贴会持续更新,都是项目中常会遇到的问题,总 ...

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

    1. Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.因此从上述的定义中我们可以看到,Session实际上是一个特定的 ...

  3. IE常见bug及其修复方法

        一.双边距浮动的bug 1.1一段无错的代码把一个居左浮动(float:left)的元素放置进一个容器盒(box) 2.1在浮动元素上使用了左边界(margin-left)来令它和容器的左边产 ...

  4. 【测试方法】Web测试中bug定位基本方法

    知识总结:Web测试中bug定位基本方法 涉及知识点:测试方法 在web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,没错,确实是BUG.进一步了解这个BUG的问题出 ...

  5. Approach for Unsupervised Bug Report Summarization 无监督bug报告汇总方法

    AUSUM: approach for unsupervised bug report summarization 1. Abstract 解决的bug被归类以便未来参考 缺点是还是需要手动的去细读很 ...

  6. AsyncHttpClient 中的重定向和 setEnableRedirects 方法异常解决

    今天使用 AsyncHttpClient  开源库,遇到个很崩溃的问题: 方法  setEnableRedirects(false); 从名称上看应该是重定向开关的方法,设置为 false 后则普通请 ...

  7. Android开发教程 - 使用Data Binding Android Studio不能正常生成相关类/方法的解决办法

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

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

    首先,环境:ubuntu 14.04,采用apt-get的方式安装的,手动安装可能路径设置稍有区别. 1.安装MySQL后,用命令行首次启动时发现找不到Mysqld.sock文件,提示: ERROR ...

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

    WPF Popup全屏 弹出方法.解决只显示75%的问题.   WPF 中 Popup 有一个特点.当Popup的高度超过屏幕的75%的时候,只显示75%的高度. 如下代码: <Window x ...

  10. Oracle 导出空表的新方法(彻底解决)

    背景 使用Exp命令在oracle 11g 以后不导出空表(rowcount=0),是最近在工作中遇到一个很坑的问题,甚至已经被坑了不止一次,所以这次痛定思痛,准备把这个问题彻底解决.之所以叫新方法, ...

随机推荐

  1. 【沽泡学院07】基于ElasticSearch搜索附近的人

    1. 为什么要选择ElasticSearch 1)ElasticSearch 优点: 分布式.实时的.Push replication 完全支持Apache Lucene的接近实时的搜索 处理多租户( ...

  2. ADX3000二层的负载均衡设计问题

    我的想法是 想在现有的局域网内部,利用ADX划分出一个新的局域网,模拟负载均衡. 现在有三台试验机器,拓扑图如下: 各个机器IP设置如下图: 我进行了如下的操作: 1 在组网配置当中,设置eth1_0 ...

  3. CF1100E Andrew and Taxi 二分答案+拓扑排序

    \(\color{#0066ff}{ 题目描述 }\) 给定一个有向图,改变其中某些边的方向,它将成为一个有向无环图. 现在求一个改变边方向的方案,使得所选边边权的最大值最小. \(\color{#0 ...

  4. 资深专家深度剖析Kubernetes API Server第2章(共3章)

    欢迎来到深入学习Kubernetes API Server的系列文章的第二部分.在上一部分中我们对APIserver总体,相关术语及request请求流进行探讨说明.在本部分文章中,我们主要聚焦于探究 ...

  5. 写一个Spring Boot的Hello World

    尽管这个demo也就hello world水平,但我还是要记录一下(总算能动了QAQ),毕竟老是看文章不动手不行啊 上次写Servlet的CRUD项目还是2月份,虽然代码忘的差不多了,但我就记得JDB ...

  6. 20. js继承的6种方式

    想要继承,就必须要提供个父类(继承谁,提供继承的属性) 一.原型链继承 重点:让新实例的原型等于父类的实例. 特点: 1.实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性.( ...

  7. Gson的fromJson()方法

    Gson提供了fromJson()方法来实现从Json相关对象到Java实体的方法. 在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构. 先来看第一种: 比如jso ...

  8. Maven with Scala

    下面是一个在Maven使用Scala的pom.xml <?xml version="1.0" encoding="UTF-8" standalone=&q ...

  9. vscode 注册表

    Windows Registry Editor Version 5.00 ; Open files [HKEY_CLASSES_ROOT\*\shell\Open with VS Code] @=&q ...

  10. C语言之基本编程思想与基本概念扫盲

    前言:C语言是包含了很多编程的基本思想,理解C能够有助于理解其他高级语言,深刻理解编程很多基本思想:这对新手入门是有很多好处的,正所谓磨刀不误砍柴工,内功与基础修炼扎实了,才能开始盖高楼大厦. 这篇文 ...