Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET中管理会话超时_Asp.net_Web Services_Web Applications_Session_Timeout - Fatal编程技术网

在ASP.NET中管理会话超时

在ASP.NET中管理会话超时,asp.net,web-services,web-applications,session,timeout,Asp.net,Web Services,Web Applications,Session,Timeout,我有一个ASP.NET 2.0 Web应用程序与多个ASP.NET 2.0 Web服务对话。两者都使用ASP.NET会话来持久化会话数据 为了警告用户应用程序的会话超时,我使用的修改版本显示了一个名为“您的会话即将过期”的ModalPopupXtender,并显示了“保持登录”和“注销”按钮。单击“保持登录”将回调一个空方法,这将重置会话计时器(我相信是因为每个HttpRequest都会导致对的调用) 为了防止服务中的会话在应用中的会话之前超时,我将它们的超时时间设置为更长,并计划在应用中重置会

我有一个ASP.NET 2.0 Web应用程序与多个ASP.NET 2.0 Web服务对话。两者都使用ASP.NET会话来持久化会话数据

为了警告用户应用程序的会话超时,我使用的修改版本显示了一个名为“您的会话即将过期”的ModalPopupXtender,并显示了“保持登录”和“注销”按钮。单击“保持登录”将回调一个空方法,这将重置会话计时器(我相信是因为每个HttpRequest都会导致对的调用)

为了防止服务中的会话在应用中的会话之前超时,我将它们的超时时间设置为更长,并计划在应用中重置会话计时器时对它们调用一个空方法。但是,对于正在重置的计时器没有任何限制

我必须重写吗?我该怎么做?
或者是否有其他方法实现我的目标(例如,在应用程序服务处于活动状态时保持服务会话处于活动状态)?我正在考虑扩展我的超时控制,以便通过应用程序发送心跳(如)。

我不确定是否遵循。您是说在webservice上调用空方法不会重置会话计时器吗


此外,这似乎是一个很大的开销。为什么不将web应用程序和web服务设置为使用相同的会话cookies?

如果您打算或多或少地自动延长超时时间,为什么不从一开始就将其设置得非常高?K.I.S.S.,省去了在不需要的地方编写代码的麻烦。

当.Net应用程序调用web服务时,是.Net web应用程序作为客户机,负责会话。在最好的情况下,web服务的会话特定于.Net web应用程序,而不是浏览器用户(即web应用程序的客户端)

我认为默认情况是,每次进行web服务调用时会话都会启动(web服务调用不保存cookies,这是会话状态所必需的),因此它不会在调用之间存储任何内容。但我现在没有测试这个。有几种打电话的方式,我认为其中有些储存饼干,有些不储存


但在任何情况下:在您的场景中,确实没有理由在web服务中使用会话:对于web服务,只有一个客户端(web应用程序),因此如果需要缓存数据或其他内容,您也可以使用应用程序状态。

是.Net web应用程序还是浏览器(来自JavaScript)这就是调用web服务吗?.net web应用程序超时越大,内存中保存的会话越多,服务器需要的资源也越多。要保证服务会话不能在应用程序会话之前超时,需要无限超时,因此需要无限的服务器资源。如果我使非活动会话超时,那么我只需要与用户负载成比例的资源;问题是在哪里调用该方法。你的第二个:我认为.net不能共享cookies,因为第一个位于浏览器和web应用之间,而第二个位于web应用和服务之间。web服务可以使用cookies保存会话状态:在这种情况下,web应用程序的每个会话都是web服务的客户端。好的,很抱歉怀疑你。我只是假设如果你知道怎么做,你就不会这么做:这种传播cookie/会话的方式看起来就像是一种黑客行为。完全违背SOA原则。但也许你有充分的理由这么做。。。基本上,会话计时器在每次发出请求时都会重置,因此要进行web服务调用,您可以挂接每次发出请求时触发的任何事件。例如,应用程序中的BeginRequest(在Global.asax.cs中,应用程序\u Start添加this.BeginRequest+=web\u服务调用的事件\u)