C# AJAX调用后会话过期时如何将用户重定向到登录页面

C# AJAX调用后会话过期时如何将用户重定向到登录页面,c#,ajax,asp.net-mvc,session,session-state,C#,Ajax,Asp.net Mvc,Session,Session State,我有以下代码,在大多数情况下运行良好 但当会话过期并且用户执行一些AJAX调用时,它无法正常工作,因此返回AJAX错误。 如何以正确的方式进行管理 谢谢 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] public class SessionExpireFilterAttribute : ActionFilterAttri

我有以下代码,在大多数情况下运行良好

但当会话过期并且用户执行一些AJAX调用时,它无法正常工作,因此返回AJAX错误。

如何以正确的方式进行管理

谢谢

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public class SessionExpireFilterAttribute : ActionFilterAttribute
    {
        public static String LoginUrl { get; set; }
        public delegate bool CheckSessionDelegate(HttpSessionStateBase session);

        public static CheckSessionDelegate CheckSessionAlive;

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            HttpSessionStateBase session = filterContext.HttpContext.Session;
            if ((CheckSessionAlive == null) || (CheckSessionAlive(session)))
                return;


            //send them off to the login page
            var url = new UrlHelper(filterContext.RequestContext);
            var loginUrl = url.Content(LoginUrl);
            session.RemoveAll();
            session.Clear();
            session.Abandon();

            filterContext.HttpContext.Response.StatusCode = 403;
            filterContext.HttpContext.Response.Redirect(loginUrl, false);
            filterContext.Result = new EmptyResult();

        }
}
我目前的解决方案如下,但这是正确的吗

function UpdateSelectedProduct(uid, checked) {
      $lastProductUID = uid;
        var params = { uid: uid, isSelected: checked };
        $.ajax({
            type: "POST",
            url: '@Url.Action("UpdateSelectedProduct", "Orders")',
            data: JSON.stringify(params),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {

            },
            error: function () {
                // alert("Timeout error.");
                document.location.href = "/";  // <---- Here it is
            }
        });
    }
函数更新选定产品(uid,选中){
$lastProductUID=uid;
var params={uid:uid,isSelected:checked};
$.ajax({
类型:“POST”,
url:'@url.Action(“UpdateSelectedProduct”、“Orders”),
数据:JSON.stringify(params),
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(数据){
},
错误:函数(){
//警报(“超时错误”);

document.location.href=“/”;//您的解决方案将强制页面重定向到“/”在JS端。您是否尝试将登录url作为响应的一部分发送?这样,您可以从javascript errorhandler中获取它并适当地重定向。您可以检查错误中的状态代码,并在错误出现时重定向unauthorized@Jonesy听起来不错。你能把一些代码示例作为答案吗?请看