我们知道当我们关闭浏览器时,会话就会被破坏。
请帮助我进行以下查询。
假设我单击了注册页面上的submit按钮,内部调用了SQL存储过程,这需要更多的时间来执行。
同时,如果我关闭浏览,会发生什么?
想了解更多关于这个生命周期的信息,谢谢
发布于 2014-08-24 09:31:07
首先要记住这一点。
如果这两种方法中的任何一种都消失了,那么会话就消失了,所以让我们来分析一下它们。
饼干
如果cookie是一个会话cookie (临时的),那么当用户关闭浏览器时,如果不是临时的,那么当它过期时,或者如果用户清除它,或者如果用户处于私有模式,甚至没有保存,那么cookie就会消失。
因此,当与会话连接的cookie消失时,您将丢失会话。
即使浏览器由于其他原因无法读取会话cookie,会话也可能丢失。
服务器上的会话数据
与cookie连接的会话是服务器上的数据字典。会话有一个超时,因此如果用户没有在这段时间内更新对服务器的调用,服务器就会杀死服务器上的会话数据。
另外,请注意,会话可以在Server上服务,也可以在运行在后台并将该数据保存在内存中的服务中。
如果将会话数据保存在内存中,则会话超时、IIS循环、以及出于原因清除会话数据的服务本身可能会丢失这些数据。
服务器端超时
如果您调用了一个长时间函数,并且用户结束了他们的连接,那么这个过程将继续运行,直到两端都得到超时为止。如果您的进程需要10分钟才能执行,那么这就不太安全了,您可能会得到超时,并且永远不会正确结束,即使用户仍然连接。如果你说了几秒钟,那么它的相对好,程序将执行,即使用户关闭他的浏览器端。
检查页面外的时间和sql服务器端的时间。如果您的用户连接良好,您将结束相同的,如果用户关闭他们的连接在中间。
请记住,在大量多用户调用的情况下,您可能会遇到会话锁的问题,请阅读此q/a ASP.NET服务器不异步处理页面
所以,注意这个过程不要超过几秒钟。
遗言
在一段时间内不丢失会话的最“安全的方法”是使用良好的安装cookie,这不是临时的,而是将他们的生命维持几个月(google保存cookie长达两年),并使用SQL Server保存会话数据。
更多详情可参阅:
ASP.NET状态管理建议
使相关ASP.NET应用程序的会话与另一个ASP.NET应用程序保持活动
ASP.NET会话状态概述
https://stackoverflow.com/questions/25468901
复制相似问题