【发布时间】:2014-08-24 05:49:56
【问题描述】:
我们知道,当我们关闭浏览器时,会话会被销毁。
请帮我解决以下问题。
假设我点击了注册页面上的提交按钮,在内部它被称为 SQL 存储过程,这需要更多时间来执行..
如果我同时关闭浏览会发生什么?
我的 sql 连接是否仍然可用?如果是,那么在关闭浏览器后我的存储过程仍然处于执行模式?
会话究竟什么时候被销毁?
想了解更多关于这个生命周期的信息,谢谢
【问题讨论】:
标签: asp.net
我们知道,当我们关闭浏览器时,会话会被销毁。
请帮我解决以下问题。
假设我点击了注册页面上的提交按钮,在内部它被称为 SQL 存储过程,这需要更多时间来执行..
如果我同时关闭浏览会发生什么?
我的 sql 连接是否仍然可用?如果是,那么在关闭浏览器后我的存储过程仍然处于执行模式?
会话究竟什么时候被销毁?
想了解更多关于这个生命周期的信息,谢谢
【问题讨论】:
标签: asp.net
首先要记住这一点。
如果这两个中的任何一个消失了,会话就消失了,所以让我们分析一下。
如果 cookie 是 session cookie(临时),则在用户关闭浏览器时消失,如果不是临时的,则在过期时消失,或者当然如果用户清除它,或者如果用户是在私人模式下甚至没有保存。
所以当与会话相关联的 cookie 消失时,您将丢失会话
即使浏览器由于其他原因无法读取会话 cookie,会话也可能丢失。
与 cookie 连接的会话是存在于服务器上的数据字典。 会话有超时,所以如果用户在这段时间内没有更新对服务器的调用,服务器会杀死服务器上的会话数据。
另外,请注意,会话可以在 SQL Server 上提供,也可以在后台运行并将数据保存在内存中的服务中提供。
如果您将会话数据保存在内存中,那么它们甚至可能在会话超时之前丢失,原因可能是 IIS 回收,也可能是服务本身出于它们的原因将其清除。
如果您调用了一个长时间的函数,并且用户结束了他们的连接,那么该过程将继续运行,直到任一端的任一端超时。如果您的进程需要 10 分钟才能执行,这不是很安全,您可能会超时并且永远不会正确结束,即使用户仍处于连接状态。如果你说话几秒钟,那么它就可以了,即使用户关闭了他的浏览器,程序也会执行。
查看页面超时时间和sql server端超时时间。如果您在用户连接良好的情况下结束,您将结束同样的操作,并且如果用户在中间关闭他们的连接。
请记住,在繁重的多用户通话情况下,您可能会遇到会话锁定问题,请阅读此 q/a ASP.NET Server does not process pages asynchronously
所以请注意这个过程不要超过几秒钟。
在一段时间内不丢失会话的最“安全方法”是使用良好设置的 cookie,这不是临时的,并且可以保存几个月(谷歌将 cookie 保存两年),并使用 SQL Server保存您的会话数据。
更多详情请阅读:
ASP.NET State Management Recommendations
Session would not retain values and always return null
Keeping a related ASP.NET application's session alive from another ASP.NET application
ASP.NET Session State Overview
【讨论】: