如果有一网页,里面调用了session,如果我把这个页面关闭了,这个session就在服务端释放了,还是服务器重启才会释放?对session的生存期不太明白,请指点。谢谢

解决方案 »

  1.   

    可以在web.config中设置:
    <sessionState   mode="InProc"   cookieless="false"   timeout="60"   />
      

  2.   

    Session对象. 保存每个用户的专用信息。它的生存期是用户持续请求时间加上一段时间,默认为20.可在web.config修改
      

  3.   

    当客户端的浏览器关闭后,该session好像不会马上失效,而是当30分钟后才被destory(如果timeout设成30分钟)。
      

  4.   

    Session的生存周期仅仅跟web.config的设置有关系,你关掉IE,然后再开一个,浏览器会负责把你的Session信息附加在请求里面。如果Cookieless设置为true,那么SessionID 就会附加在URL上发送给Server
      

  5.   

    Session有三种默认配置方式。可分配存储于客户端,可分配存储于服务器端,可通过URL进行存储。
    Session默认的生存周期为20分钟,不过当你全部该网站的网页关闭时,你的Session也就意味着过期。
      

  6.   

    你关闭一个网站的时候,服务器并不知道你关闭了浏览器,所以session还会在服务器上存在,
    服务器检查到某个session在设置的timeout时间内都没有请求,就会结束掉这个session.
    所以,直接关闭浏览器,session还会在服务器上存在timeout长的时间.
    (需要注意,如果网页上有个注销的按钮,你点了后session就马上没了)
      

  7.   

    Session的生存周期默认的是20分钟..在web.config中可修改
      

  8.   

    7楼的朋友,你说的有注销按钮,点了后session就马上释放了,这个释放是服务器释放还是,在按钮事件里面写代码释放掉的?
      

  9.   

    <sessionState  mode="InProc"  cookieless="false"  timeout="60"  />
    cookieless="false" 真与假有什么区别?
      

  10.   

    首先,要搞清楚什么叫做Session。如果按照有些人说的,把Session.SessionID看作Session,那么它是Cookie(或者asp.net使用cookieless方式)保存的,也就是说只有客户端关闭进程,这个SessionID才会消失,否则总是向服务器端提交同样的SessionID。从这个方面,把Session、SessionID和会话等同起来,也是可以理解的。不过,一般我们都默认地把保存了数据对象的Session集合叫做Session,也就是使用Session[key]这样的语法来存取数据的集合。对于这个Session,实际上每一次页面回发时,都是创建一个新的Session集合对象。只不过,当创建这个集合对象时,就把服务器所保存的关于这个SessionID所对应的所有数据重新装入这个Session集合对象,这样你的代码就可以从Session集合中读取数据。你以为总是同一个Session对象,而实际上就跟Page对象一样都是新的,每一次回发处理时都创建新的对象。每一次回发创建Page都要尝试重新回填ViewState,类似地,而每一次创建Session也是要回填上一次你在上一个Session集合中保存的对象。那么Session是怎么“过期”的呢?实际上不论什么会话访问服务器,服务器都会查看所有的会话(SessionID),如果哪一个过期了,就会把它对应的所有数据对象删除掉。因此,当你的会话“过期”时,只要有任何一个人的会话访问服务器,你的会话对象的数据才被删除。所以并不是会话“发呆”20分钟时间一到就立刻触发Sessin_End,而是20分钟的限制到了以后再有任意一个会话访问服务器时才会触发它。
      

  11.   

    如果把Session等同于SessionID、会话,那么可以说你关闭网页才会结束。如果把Session等同于你编程时使用的Session集合对象,那么可以说跟Page的生存期一样(处理完就立刻释放,然后回发时创建新的一个实例)。如果把Session看成Session集合中保存的对象的总体,那么可以说在设置的Session过期时间超过以后当任何会话访问服务器时才结束。
      

  12.   

    注销是要写代码的~~~~  把Session值清空就OK了
      

  13.   

    IIS检测哪些session超时了,然后就删掉。就这么简单,哪那么多废话!!!
      

  14.   

    浏览器关闭session就失效啦 默认的情况下20
      

  15.   

    Session有三种默认配置方式。可分配存储于客户端,可分配存储于服务器端,可通过URL进行存储。 
    Session默认的生存周期为20分钟,不过当你全部该网站的网页关闭时,你的Session也就意味着过期。
    session 的生存周期可以自己在Webconfig文件 中设置Timout属性值 就可以定义Session的生存周期!!!
      

  16.   

    6楼的朋友session好象都是存储在服务器端的吧;有服务器当前进程存储,服务器另外开辟进程存储,还有数据库存储
    后面的两种方法存储的数据必须都支持序列化,前一种不需要,但服务器内存不够时session容易被回收掉,所以也就是为什么session数据会经常丢失的问题。
      

  17.   


    非常感谢你,你的回答非常详细,但我还有一个问题就是session“过期”的问题,如果客户端把网页关闭了,就不能访问相同的sessionID的session值了,那这个session的值是怎么释放的呢?因为按你的说法,是“过期”后有客户访问才释放的,但这种情况下就没有人访问了,这个session又该怎么释放呢?
      

  18.   

    对了,12楼的朋友还有一个问题,就是Session集合在每次页面回发时对象都销毁,然后根据sessionID重新填写,我想问的是session集合是释放每个客户端数据还是只释放当前页面用到的session集合对象?
      

  19.   

    总而言之就是session生成后服务器会按照config文件设定的时间长度检测这个session的链接。如果是开着的。就不销毁。销毁的当然是特定客户端的所有session集合
    另外可以写一个ajax小程序当浏览器关闭时自动通知服务器立即销毁session。(这样做比让服务器自己检测session效率要高)不过只适合ie和ff。
      

  20.   

    12楼和25楼的朋友谁的对呀,12楼朋友说session是在过期后有客户访问才删除的,25楼说服务器会按照config文件设定的时间长度检测这个session的链接,如果打开就不销毁。
    到底那个说的对?
      

  21.   


    你要理解他说的“总而言之.....”,那是个并不排除我说的机制的“活话”。asp.net并不会花费代价为每一个Session过期时间都设置一个定时器,也不是每隔零点几秒就去轮询一次所有Session看看有没有超时,但是也不会等到会话他自己访问服务器时才销毁Session集合中的数据(让过期数据占用内存)。
      

  22.   


    你的意思是说,只要有客户端访问就会判断所有session过期没,如果有“过期”session,服务器就会释放“过期”session。是这个意思吧?