Asp.net 防止AJAX计时器控制请求扩展FormsAuthentication票证?
我有一个webforms应用程序,它使用一些ASP.NET AJAX计时器控件(即轮询)。如果用户在其中一个页面上,他们将永远不会超时,因为轮询过程会使他们的身份验证票证保持活动状态 我想分段计时器控件,这样它们就不会触发Forms身份验证的RenewTicketIfOld方法。我所处的路径和我以前做过的类似,就是向AJAX HTTP请求中注入一些东西,将这些请求标识为来自计时器,然后在表单身份验证模块之后运行一些代码,表单身份验证模块隐藏身份验证cookie,使其不会在响应中被发送回去 关于如何防止计时器控件使表单身份验证票证保持活动状态,还有其他建议吗?我的第一个窍门。 在web配置中,将域设置为www.yoursite.comAsp.net 防止AJAX计时器控制请求扩展FormsAuthentication票证?,asp.net,ajax,asp.net-ajax,timer,forms-authentication,Asp.net,Ajax,Asp.net Ajax,Timer,Forms Authentication,我有一个webforms应用程序,它使用一些ASP.NET AJAX计时器控件(即轮询)。如果用户在其中一个页面上,他们将永远不会超时,因为轮询过程会使他们的身份验证票证保持活动状态 我想分段计时器控件,这样它们就不会触发Forms身份验证的RenewTicketIfOld方法。我所处的路径和我以前做过的类似,就是向AJAX HTTP请求中注入一些东西,将这些请求标识为来自计时器,然后在表单身份验证模块之后运行一些代码,表单身份验证模块隐藏身份验证cookie,使其不会在响应中被发送回去 关于如
<forms domain="www.yoursite.com" .... >
并在非安全页面上进行计时器调用。这样就不会再次触发身份验证,因为现在不在非安全页面上读取cookie
最后,在无cookie页面和无会话页面上运行times,我指的是一个根本不发送或获取cookie的页面。我不知道这在同一个域名页面下是否可行,我认为您需要一个不同的域名(outs)正在取得进展,目前这是我的解决方案。我从在计时器AJAX请求中设置自定义头并在模块中检查该头(您可以在应答版本历史记录中看到这一点)变成了一个简单的、仅模块的解决方案。(问题的关键)
我已经重新表述了,问题是当计时器控件触发其回发时,用户从不超时。将计时器间隔设置为大于FormsAuth过期间隔应该有效。感谢您的建议。但是,我仍然需要计时器来做一些真正的工作。比如,每10秒更新一次屏幕,或者每5分钟自动保存一些文档。这两种情况都需要在30分钟到期前发生。您可以设置为false,但如果用户进行了一些更改并需要保存文档,他必须重新登录。在我的情况下,滑动到期是应用程序的有效使用所必需的(当用户在做事情时,他们不必再次登录).脏苔藓般的把戏,只为更新面板使用第二个web应用程序。但我认为没有太多其他的解决方案。好主意。我想我会看看第一个有多远,因为我想只使用ssl cookies。
<forms requireSSL="true"
public class SkipAuthTicketRenewalModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.EndRequest += new EventHandler(context_EndRequest);
}
void context_EndRequest(object sender, EventArgs e)
{
// See if auth cookie was added in response to the timer control update by the FormsAuthModule,
// indicating the ticket was renewed. If it was, remove it so we don't extend the ticket.
HttpContext ctx = HttpContext.Current;
string ctrlname = ctx.Request.Params.Get("__EVENTTARGET");
if (!String.IsNullOrEmpty(ctrlname))
{
Page page = ctx.Handler as Page;
if (page != null)
{
Control ctrl = page.FindControl(ctrlname);
if (ctrl != null && ctrl is Timer)
{
ctx.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
}
}
}
}
}