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分钟交互一次)~
  • 相关阅读:
    VMware 克隆一个虚拟机(win7)
    HDU 5695 Gym Class (拓扑排序、贪心、优先队列)
    HDU2647 Reward (拓扑排序、反向建图)
    HDU 3342 Legal or Not (拓扑排序、有向图是否存在环)
    Vue框架简介及简单使用
    Linux文件常用指令
    Linux系统相关命令
    Linux关机指令详解
    linux目录结构
    Linux用户相关命令
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/1214679.html
Copyright © 2011-2022 走看看