在ASP.NET中管理会话超时

时间:2010-02-17 18:09:14

标签: asp.net web-services web-applications session timeout

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

要警告用户应用程序的会话超时,我使用Travis Collins's Timeout Control的修改版本来显示标题为“您的会话即将过期”的ModalPopupExtender以及按钮“保持登录状态”和“注销”。单击“保持登录状态”时,它会回调一个空方法,该方法会重置会话计时器(我相信因为每个HttpRequest都会调用ResetItemTimeout)。

为了防止服务中的会话在应用程序之前超时,我将其超时设置为更长,并且计划在应用程序中重置会话计时器时调用它们的空方法。但是,重置计时器没有Session-State Event

我是否必须覆盖ResetItemTimeout?我该怎么做呢? 或者是否有另一种方法来实现我的目标(例如,在应用服务还活着的同时保持服务会话活着)?我正在考虑扩展我的超时控制以通过应用程序发送心跳(如Tim Mackey's idea)。

3 个答案:

答案 0 :(得分:0)

我不确定我会效仿。你是说在webservice上调用一个空方法不会重置会话计时器吗?

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

答案 1 :(得分:0)

当.Net应用程序调用Web服务时,.Net Web应用程序是客户端并拥有该会话。 Web服务的会话 - 在最好的情况下 - 特定于.Net Web应用程序,而不是具有浏览器的用户,该用户是Web应用程序的客户端。

我认为默认情况是每次进行Web服务调用时会话都会启动(Web服务调用不会保存会话状态所需的cookie),因此它不会在调用之间存储任何内容。但我现在没有测试过。有几种拨打电话的方式,我认为其中一些存储cookie,而另一些则不存储。

但无论如何:在您的场景中,没有理由在Web服务中使用会话:对于Web服务,只有一个客户端(Web应用程序),因此您也可以使用Application状态,如果你需要缓存数据或其他东西。

答案 2 :(得分:-1)

如果你要或多或少地自动延长超时,为什么不把它设置得很高呢?吻。并且省去了在不需要的地方编写代码的麻烦。