Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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 防止AJAX计时器控制请求扩展FormsAuthentication票证?_Asp.net_Ajax_Asp.net Ajax_Timer_Forms Authentication - Fatal编程技术网

Asp.net 防止AJAX计时器控制请求扩展FormsAuthentication票证?

Asp.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,使其不会在响应中被发送回去 关于如

我有一个webforms应用程序,它使用一些ASP.NET AJAX计时器控件(即轮询)。如果用户在其中一个页面上,他们将永远不会超时,因为轮询过程会使他们的身份验证票证保持活动状态

我想分段计时器控件,这样它们就不会触发Forms身份验证的RenewTicketIfOld方法。我所处的路径和我以前做过的类似,就是向AJAX HTTP请求中注入一些东西,将这些请求标识为来自计时器,然后在表单身份验证模块之后运行一些代码,表单身份验证模块隐藏身份验证cookie,使其不会在响应中被发送回去

关于如何防止计时器控件使表单身份验证票证保持活动状态,还有其他建议吗?

我的第一个窍门。 在web配置中,将域设置为www.yoursite.com

<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);
                }
            }
        }
    }
}