asp.net ashx处理程序会话超时和jquery ajax调用
我正在asp.net中开发一个web表单应用程序,并将jQueryAjax调用用于大多数操作。对于服务器操作,我使用ashx处理程序 我的问题是当用户的会话过期时(在一段时间不活动之后),用户单击一个按钮进行jquery ajax调用,如何从处理程序中检测该会话过期并返回特定的json a但是没有正确的答案 提前谢谢 rgdsasp.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
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;
}
});