zoukankan      html  css  js  c++  java
  • sessionState 为什么用DB保存Session dodo

    由于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丢失。

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

    这样,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。

    在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。
    如:
    [Serializable]
    public class MyClass
    {
    ......
    }
    回答者:三根鞋带 - 总监 八级 8-22 10:48
    如果个别页面太久(写的资料太多可以采用把session转成变量.)或者直接用ajax每隔一段时间访问一次服务器来达到检测客户端是否进行操作.
    回答者:coolbreeze5588 - 举人 四级 8-22 10:55
    这个问题不是怎么好解决,在WEB开发中尽量少用这个东西
    回答者:xydlmnn - 总监 九级 8-22 11:47
    解决方案是:用ajax间隔和服务器交互(比如,5分钟交互一次)~
  • 相关阅读:
    【NOIP16提高组】换教室
    【扬中集训Day6T1】 白日梦
    【POJ 1061】 青蛙的约会
    【扬中集训DAY5T1】 交换矩阵
    【USACO】 Balanced Photo
    【USACO】 Balanced Lineup

    POJ P3352 Road Construction 解题报告
    洛谷 P2783 有机化学之神偶尔会做作弊 解题报告
    洛谷 P2300 合并神犇 解题报告
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/1214679.html
Copyright © 2011-2022 走看看