如何在setInterval ajax Web服务调用中停止ASP.net表单身份验证/会话更新?

lsl*_*w00 9 javascript asp.net web-services forms-authentication session-timeout

我有一个控件,我写的有一个javascript组件和一个Web服务组件.我遇到的问题是javascript设置为:

setInterval(this._checkAlertsHandler, this._messageCheckInterval * 1000);
Run Code Online (Sandbox Code Playgroud)

这会调用一个函数来进行webservice调用:

Alert.SiteAlertService.GetAlerts(this._receivedAlertsHandler, this._errorReceivedAlertsHandler);
Run Code Online (Sandbox Code Playgroud)

所以这是使用Web服务javascript代理方法来访问Web服务.问题是我们的应用程序具有表单身份验证和超时值,因此如果用户空闲时间过长,则会将其注销.

我的webservice调用显然将包含会话和表单身份验证密钥的cookie发送到Web服务.然后,asp.net webservice会自动更新会话和表单身份验证.每当javascript访问Web服务时,它基本上保持用户活着.我不想要这种行为,这应该只是绕过它,所以即使这个js正在点击Web服务来检查新消息,如果用户没有在我们的应用程序上做回发(并且实际上是空闲的),它将仍然记录下来.这不会发生:(

我想要发生的是这个对Web服务的间隔调用不会更新任何身份验证(我可以通过使用具有字典键/值的应用程序级别变量为用户会话ID来解决会话更新,所以我不必使用任何会话级变量).

我该怎么做/改变我的网络服务/或控制工作就像我想要的方式?

Rya*_*anW 7

我正在研究不同的方法.我正在做的一种方法是将其添加到Ajax服务端点:

// Hide the cookie so this call doesn't extend the user's ticket
HttpContext ctx = HttpContext.Current;
ctx.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以取消Auth Ticket续订,正确更新的cookie将永远不会返回给客户端.

如果您要排除多个Ajax端点,则可以实现一个模块来标识这些端点,并包含从响应中删除cookie的代码.