none
什么情况下SESSION会丢失 RRS feed

  • 问题

  • 你好

          最近发现一个问题:我在后台生成一些文件,然后打包成ZIP文件,用HTTP下载后,SESSION不见了,但是用F5刷新一下界面,SESSION又有了,请教一下,这是怎么回事。

          原来以为,只要不关闭IE,或SESSION不超时,或是在同一个信任域内,SESSION就不会丢失,无论何时获得,都可以,这次没搞明白。


    1+1=The World >>> BLOG=http://blog.csdn.net/liuning800203 >>> Email=liuning800203@hotmail.com
    2010年7月28日 1:04

答案

    • asp.net Session的实现

      asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。

      原因1:

      bin目录中的文件被改写,asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失

      原因2:

      文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失

      原因3:

      似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开

      原因4:

      Session的时间设置是不是有问题,会不会因为超时造成丢失

      原因5:

      IE中的cookie数量限制(每个域20个cookie)可能导致session丢失

      原因6:

      使用web garden模式,且使用了InProc mode作为保存session的方式

    2010年8月1日 6:01

全部回复

    • asp.net Session的实现

      asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。

      原因1:

      bin目录中的文件被改写,asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失

      原因2:

      文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失

      原因3:

      似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开

      原因4:

      Session的时间设置是不是有问题,会不会因为超时造成丢失

      原因5:

      IE中的cookie数量限制(每个域20个cookie)可能导致session丢失

      原因6:

      使用web garden模式,且使用了InProc mode作为保存session的方式

    2010年8月1日 6:01
  • Session的“超时”并不只是不关闭浏览器就不会丢,顾名思义,“超过一定时间”之后也会丢。

    默认设置是10分钟到20分钟之间,如果下载文件花的时间太长的话可能就真的“超过时间”了。


    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。 同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。
    2010年8月1日 17:39
  • :D   学习加回复

    2010年8月2日 1:18
  • 你好

          谢谢你的答复,有道理。原来我只是认为超时或是关闭IE,SESSION才会消失。学习了,谢谢!!!


    1+1=The World >>> BLOG=http://blog.csdn.net/liuning800203 >>> Email=liuning800203@hotmail.com
    2010年8月2日 2:24