session中保存了一个的id值,许多业务逻辑要根据这个id值来处理,所以许多页面要从session里获取这个值,但是令人纠结的是有时候总是取不到,没有session.remove ,session也米有过期。后来加了个session的监听器发现有时候自己就把这个值给清除了。总是这样用,从来没遇到过这中问题,我的世界观都被颠覆了。。求救!

解决方案 »

  1.   

    1、InProc  
      session存储在进程内,即inetinfo.exe这个进程中。
    2、SQLServer  
      会话状态将使用进程外 SQL Server 数据库来存储状态信息。  
    3、StateServer  
      会话状态将使用进程外 ASP.NET 状态服务来存储状态信息。
      而IIS默认是以InProc方式来存储session的,即存储在 IIS进程中,也就是inetinfo.exe这个进程。当inetinfo.exe进程不稳定或崩溃时,这些信息也就会丢失。另外,当IIS关闭,重启时Session信息也会丢失。
    查看session配置的存储方式,用地3种比较好一些,一般的丢失问题都可以避免。
      

  2.   

    俺是java的,不过与.net应该大同小异,tomcat中是怎么管理回话状态的?
      

  3.   

    中间件不会有这样的问题。一般两种可能性:
    1、无意中对session该属性set了null;
    2、JSessionID发生了变化,多半出在集群环境下;
    你是用的:HttpSessionAttributeListener 来做属性监听么?那么在清除的事件中,你这么做:
    Throwable stack = new Throwable();
    stack.printStackTrace(); 
    在打印出来的堆栈信息,看看究竟是哪个类的那句话,把属性给remove 或者 set了null。
      

  4.   


    没有对这个session的操作 set为空什么的, 在用到这个session的地方打印sessionid 都是一样的, session的名字有什么要求吗?名字起得是"session_siteid"
      

  5.   

    找到是谁了!
    window.showModalDialog在这用打开的窗口中操作返回时,不止怎么回事就调用了login.do login.do会把session中的值清掉