我有一个我编写的控件,它有一个 javascript 组件和一个 Web 服务组件。我遇到的问题是 javascript 设置为:
setInterval(this._checkAlertsHandler, this._messageCheckInterval * 1000);
这会调用一个函数,该函数会像这样进行网络服务调用:
Alert.SiteAlertService.GetAlerts(this._receivedAlertsHandler, this._errorReceivedAlertsHandler);
所以这是使用网络服务javascript代理方法来访问网络服务。问题在于我们的应用程序具有表单例份验证和超时值,因此如果用户闲置时间过长,系统会将其注销。
我的 web 服务调用显然将包含 session 和表单例份验证 key 的 cookie 发送到 web 服务。然后,asp.net web 服务会自动更新 session 和表单例份验证。每次 javascript 访问 Web 服务时,它基本上都能让用户保持活力。我不想要这种行为,这应该只是规避它,这样即使这个 js 正在访问 web 服务来检查新消息,如果用户没有在我们的应用程序上进行回发(并且实际上是空闲的)它会仍然注销它们。这不会发生:(
我希望发生的是这种对 Web 服务的间隔调用不会更新任何身份验证( session 更新我可以通过使用具有用户 session ID 的字典键/值的应用程序级变量来解决,所以我不必须使用任何 session 级变量)。
我该怎么做/更改我的网络服务/或控件以按照我想要的方式工作?
最佳答案
我也在研究不同的方法。我这样做的一种方法是将其添加到 Ajax 服务端点:
// Hide the cookie so this call doesn't extend the user's ticket
HttpContext ctx = HttpContext.Current;
ctx.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
这样您就可以取消 Auth Ticket 更新,因为更新后的 cookie 永远不会返回给客户端。
如果您有多个要排除的 Ajax 端点,可以实现一个模块来识别这些端点并包含代码以从响应中删除 cookie。
关于asp.net - 如何停止 ASP.net 表单例份验证/ session 在 setInterval ajax Web 服务调用中更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102563/