zoukankan      html  css  js  c++  java
  • 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://www.jixie.net

  • 相关阅读:
    C
    A
    hdu 三部曲1 Popular Cows tarjan算法&&缩点&&拓扑排序
    hdu 三部曲 Going Home 最小费用最大流 EK算法
    hdu 三部曲 1Minimum Cost 最小费用最大流EK算法
    hdu 三部曲1 Is the Information Reliable? 差分约束 bellman_ford算法
    hdu 三部曲1 Intervals 差分约束问题 spfa算法
    hdu 三部曲 Crashing Robots
    hdu 三部曲2 Rebuilding Roads
    Codeforces 1277C As Simple as One and Two
  • 原文地址:https://www.cnblogs.com/guozhe/p/2578240.html
Copyright © 2011-2022 走看看