Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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 ashx处理程序会话超时和jquery ajax调用_Asp.net_Jquery - Fatal编程技术网

asp.net ashx处理程序会话超时和jquery ajax调用

asp.net ashx处理程序会话超时和jquery ajax调用,asp.net,jquery,Asp.net,Jquery,我正在asp.net中开发一个web表单应用程序,并将jQueryAjax调用用于大多数操作。对于服务器操作,我使用ashx处理程序 我的问题是当用户的会话过期时(在一段时间不活动之后),用户单击一个按钮进行jquery ajax调用,如何从处理程序中检测该会话过期并返回特定的json a但是没有正确的答案 提前谢谢 rgds Rifky一种方法是检查global.asax文件中的任何ashx会话是否已过期。如果有,则返回一个json会话过期对象。在客户端,您将检查该对象是否存在,并通过java

我正在asp.net中开发一个web表单应用程序,并将jQueryAjax调用用于大多数操作。对于服务器操作,我使用ashx处理程序

我的问题是当用户的会话过期时(在一段时间不活动之后),用户单击一个按钮进行jquery ajax调用,如何从处理程序中检测该会话过期并返回特定的json

a但是没有正确的答案

提前谢谢

rgds
Rifky

一种方法是检查global.asax文件中的任何ashx会话是否已过期。如果有,则返回一个json会话过期对象。在客户端,您将检查该对象是否存在,并通过javascript将用户重定向到登录页面

因此,在global.asax文件中,您将有如下内容:

   protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        var url = HttpContext.Current.Request.Url.OriginalString;
        var extension = Path.GetExtension(url);
        if (extension == ".ashx" && HttpContext.Current.Session.Contents.Count == 0)
        {
            HttpContext.Current.Response.StatusCode = 440;
            HttpContext.Current.Response.TrySkipIisCustomErrors = true;
            HttpContext.Current.Response.Write(new JObject(new JProperty("sessionExpired")).ToString());
            HttpContext.Current.Response.End();
        }
    }
然后,您将为查找“sessionExpired”对象的所有ajax查询创建一个全局ajax事件错误处理程序:

这种方法的好处在于,为了获得合理的会话过期处理,您只需要拥有这两段代码。然而,这种方法有一个缺点:

所有ashx文件必须至少具有IReadOnlySessionState或IRequiresessionState接口。否则,将触发会话过期逻辑,因为会话将被假定为空。如果您不想这样做,那么您需要一种排除某些.ashx文件的方法,例如排除包含包含您的ashx文件的特定路径的任何URL


此外,如果页面的某些部分不涉及使用会话,则您也需要排除这些页面。

此问题表明您在询问之前没有环顾四周。这里有一个类似的问题可能对@Ahmad San有所帮助,我搜索了一个更相似的问题,但找不到答案。只有一个答案,但没有正确的答案。无论如何。您提供的链接是使用jquery检查会话值。但我的问题是,如果会话过期并且ajax请求被触发,我需要在handler中检查会话是否过期。@Ahmad San,这表明我在提出该问题之前已经搜索过web,因此问题的-1不公平我试图删除-1,但网站告诉我必须先编辑该问题。很抱歉给您带来不便。@Ahmad San,我编辑了这个问题。谢谢您的回答。这对我有帮助
$(document).ajaxError(function (event, xhr, settings)
{
    if (xhr.responseText && $.parseJSON(xhr.responseText).sessionExpired)
    {
        window.location.replace("loginUrl.aspx");
        return;
    }
});