开始时我将WEB.config文件sessionState的MODE高为StateServer,timeout设为"1",试了试有时后准时1分钟SESSION就过期了。有时就要2分钟..然后点击BUTTON1按钮把timeout设为"5"(即运行时改变web.config中的sessionState timeout值为"5"分钟)结果要10多分钟;有时差不多半个小时SESSION才过期.用InProc模式就更本不会过期,有时把浏览器关掉再进就可以(但过期时间总跟设定的值不一至)。这是怎么回事。请高手指点!

解决方案 »

  1.   

    1. TimeOut只有在请求结束时才调用,也就是说如果设置timeout为10,那么你故意放置30分钟然后调用页面的时候肯定看不到session“过期”的现象,应该再次提交。2. 很多时候,释放Session的过程会“异常”,此时并不释放。就像数据库的事物保护一样,只有后台的所有Session元素都正常释放,才会真正释放Cookie中的SessionID。根据Session的Mode的不同,这种异常会发生在不同情况下,例如运行环境中InProcSessionState类的对象的读写受内存管理对象的枷锁解锁机制限制的。3. 在InProc模式下关闭浏览器还不会让Session过期?!我强烈怀疑你对Session过期的检测方法。你确信没有另一个窗口打开同一个会话SessionID了吗?4. 一定要注意,设置timeout绝对不是说到了时间自动释放。只要超过这个时间,什么时候释放session是asp.net设计者的事,没有任何合约可循。
      

  2.   

    在InProc模式下关闭浏览器,这时的关键是“关闭浏览器”,这时候起决定作用的是浏览器。关闭浏览器,然后再打开浏览器,再在地址栏重新打入同一地址,如果你得到同样的SessionID,那么我们可以对便得到前人访问的网站(例如银行、政府)的一切权利了。有这样功能的浏览器我还没有见到,如果你见到了,一定要检举出来。
      

  3.   

    关浏览器,session都不过期??怎么可能
      

  4.   

    http://www.cnblogs.com/renyu732/archive/2005/06/11/172708.html