菜鸟提问:Session的生存期? 如果有一网页,里面调用了session,如果我把这个页面关闭了,这个session就在服务端释放了,还是服务器重启才会释放?对session的生存期不太明白,请指点。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以在web.config中设置:<sessionState mode="InProc" cookieless="false" timeout="60" /> Session对象. 保存每个用户的专用信息。它的生存期是用户持续请求时间加上一段时间,默认为20.可在web.config修改 当客户端的浏览器关闭后,该session好像不会马上失效,而是当30分钟后才被destory(如果timeout设成30分钟)。 Session的生存周期仅仅跟web.config的设置有关系,你关掉IE,然后再开一个,浏览器会负责把你的Session信息附加在请求里面。如果Cookieless设置为true,那么SessionID 就会附加在URL上发送给Server Session有三种默认配置方式。可分配存储于客户端,可分配存储于服务器端,可通过URL进行存储。Session默认的生存周期为20分钟,不过当你全部该网站的网页关闭时,你的Session也就意味着过期。 你关闭一个网站的时候,服务器并不知道你关闭了浏览器,所以session还会在服务器上存在,服务器检查到某个session在设置的timeout时间内都没有请求,就会结束掉这个session.所以,直接关闭浏览器,session还会在服务器上存在timeout长的时间.(需要注意,如果网页上有个注销的按钮,你点了后session就马上没了) Session的生存周期默认的是20分钟..在web.config中可修改 7楼的朋友,你说的有注销按钮,点了后session就马上释放了,这个释放是服务器释放还是,在按钮事件里面写代码释放掉的? <sessionState mode="InProc" cookieless="false" timeout="60" />cookieless="false" 真与假有什么区别? 首先,要搞清楚什么叫做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分钟的限制到了以后再有任意一个会话访问服务器时才会触发它。 如果把Session等同于SessionID、会话,那么可以说你关闭网页才会结束。如果把Session等同于你编程时使用的Session集合对象,那么可以说跟Page的生存期一样(处理完就立刻释放,然后回发时创建新的一个实例)。如果把Session看成Session集合中保存的对象的总体,那么可以说在设置的Session过期时间超过以后当任何会话访问服务器时才结束。 注销是要写代码的~~~~ 把Session值清空就OK了 IIS检测哪些session超时了,然后就删掉。就这么简单,哪那么多废话!!! 浏览器关闭session就失效啦 默认的情况下20 Session有三种默认配置方式。可分配存储于客户端,可分配存储于服务器端,可通过URL进行存储。 Session默认的生存周期为20分钟,不过当你全部该网站的网页关闭时,你的Session也就意味着过期。session 的生存周期可以自己在Webconfig文件 中设置Timout属性值 就可以定义Session的生存周期!!! 6楼的朋友session好象都是存储在服务器端的吧;有服务器当前进程存储,服务器另外开辟进程存储,还有数据库存储后面的两种方法存储的数据必须都支持序列化,前一种不需要,但服务器内存不够时session容易被回收掉,所以也就是为什么session数据会经常丢失的问题。 非常感谢你,你的回答非常详细,但我还有一个问题就是session“过期”的问题,如果客户端把网页关闭了,就不能访问相同的sessionID的session值了,那这个session的值是怎么释放的呢?因为按你的说法,是“过期”后有客户访问才释放的,但这种情况下就没有人访问了,这个session又该怎么释放呢? 对了,12楼的朋友还有一个问题,就是Session集合在每次页面回发时对象都销毁,然后根据sessionID重新填写,我想问的是session集合是释放每个客户端数据还是只释放当前页面用到的session集合对象? 总而言之就是session生成后服务器会按照config文件设定的时间长度检测这个session的链接。如果是开着的。就不销毁。销毁的当然是特定客户端的所有session集合另外可以写一个ajax小程序当浏览器关闭时自动通知服务器立即销毁session。(这样做比让服务器自己检测session效率要高)不过只适合ie和ff。 12楼和25楼的朋友谁的对呀,12楼朋友说session是在过期后有客户访问才删除的,25楼说服务器会按照config文件设定的时间长度检测这个session的链接,如果打开就不销毁。到底那个说的对? 你要理解他说的“总而言之.....”,那是个并不排除我说的机制的“活话”。asp.net并不会花费代价为每一个Session过期时间都设置一个定时器,也不是每隔零点几秒就去轮询一次所有Session看看有没有超时,但是也不会等到会话他自己访问服务器时才销毁Session集合中的数据(让过期数据占用内存)。 你的意思是说,只要有客户端访问就会判断所有session过期没,如果有“过期”session,服务器就会释放“过期”session。是这个意思吧? 数据绑定问题?repeart分页 HttpUtility.HtmlEncode的问题?? 求解 updatepanel的刷新问题 DetailView的EditTemplate中FindControl问题,好长时间了,在线等~~~ 下载问题,高手帮忙 关于调用页面的问题 这样的程序有可能在ASP.NET中实现吗??偶是菜鸟! 请问,如何删除DATATABLE中的某一列? asp ASP.NET中怎样使用LISTVIEW组件 怎样隐藏掉网址问号后面的参数? webform工程,做出来的网站,能不能用自动化测试工具进行测试的,如果能,应该是哪个工具?
<sessionState mode="InProc" cookieless="false" timeout="60" />
Session默认的生存周期为20分钟,不过当你全部该网站的网页关闭时,你的Session也就意味着过期。
服务器检查到某个session在设置的timeout时间内都没有请求,就会结束掉这个session.
所以,直接关闭浏览器,session还会在服务器上存在timeout长的时间.
(需要注意,如果网页上有个注销的按钮,你点了后session就马上没了)
cookieless="false" 真与假有什么区别?
Session默认的生存周期为20分钟,不过当你全部该网站的网页关闭时,你的Session也就意味着过期。
session 的生存周期可以自己在Webconfig文件 中设置Timout属性值 就可以定义Session的生存周期!!!
后面的两种方法存储的数据必须都支持序列化,前一种不需要,但服务器内存不够时session容易被回收掉,所以也就是为什么session数据会经常丢失的问题。
非常感谢你,你的回答非常详细,但我还有一个问题就是session“过期”的问题,如果客户端把网页关闭了,就不能访问相同的sessionID的session值了,那这个session的值是怎么释放的呢?因为按你的说法,是“过期”后有客户访问才释放的,但这种情况下就没有人访问了,这个session又该怎么释放呢?
另外可以写一个ajax小程序当浏览器关闭时自动通知服务器立即销毁session。(这样做比让服务器自己检测session效率要高)不过只适合ie和ff。
到底那个说的对?
你要理解他说的“总而言之.....”,那是个并不排除我说的机制的“活话”。asp.net并不会花费代价为每一个Session过期时间都设置一个定时器,也不是每隔零点几秒就去轮询一次所有Session看看有没有超时,但是也不会等到会话他自己访问服务器时才销毁Session集合中的数据(让过期数据占用内存)。
你的意思是说,只要有客户端访问就会判断所有session过期没,如果有“过期”session,服务器就会释放“过期”session。是这个意思吧?