前段时间有人问我这样一个问题说 在IIS服务器上修改配置文件 会导致应用程序池重启 那么用户的Session 也会丢失 如果此时有正在进行的用户订单之类的操作  那么就会失效  问有什么办法可以解决 作为菜鸟的问 很茫然啊  有大神可以指点一二吗? 感谢

解决方案 »

  1.   

    修改配置文件,会在下一个用户进入的时候,IIS会重新加载你新配置。在你当前用户操作的时候,修改配置文件,可能导致操作失败。因为它或许恰好读取到你当前修改的配置。
      

  2.   

    InProc 模式下的 Session 值本来就是随时可能会丢失的,有无数种情况会让 asp.net 进程重启,不仅仅是修改配置文件,你随便修改一下 bin 下的文件、或者更改除了 app_data 以外的目录,服务器管理者设置了多长时间、多少IIS连接数、物理内存用到多少比例、CPU占用多少比例就自动回收一次应用程序池,你的 asp.net 程序遇到一个 BUG,等等情况,都会造成进程重启。重启是 asp.net 和 IIS 自我恢复的自动机制。编写 asp.net 程序的时候就应该避免使用 Session。只有 SessionID 是不会丢失的,而 Session 集合内容本来就是随时丢失的(注意是丢失,不是过期),这个是 asp.net 开发常识知识应该在开发之前就了解。
      

  3.   

    asp.net 使用了“Session State 服务”或者使用 SQL Server 来持久化 asp.net 进程状态。当然这都要付出巨大的代价,所以这并不是默认的 InProc 模式。默认模式下,设计开发 asp.net 程序就不应该随便使用 Session 集合。这个应该从一开始就学到。你可以基于 SessionID 和 Cache 来管理缓存对象,然后当缓存对象不存在时(需要重建时)才去读取数据库。
      

  4.   

    一般订单都是存放在数据库里,不会存放在SESSION里的,通常都是用户登录网站后的用户信息存放在SESSION
    此时如果重启,也就是登出系统
      

  5.   

    其实,当你的参数需要变动时,那建议这些参数不要放在在站点的配置文件。如放在数据库或xml文件中等等。
      

  6.   

    只能考虑cookie存储,或者其他集中存储session方式
      

  7.   

    session缓存到数据库或者Redis吧