如何在Laravel应用程序中处理会话超时

ugmeyewa  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(178)

我有一个使用vue的Laravel 9应用程序。我在vue组件中广泛使用 AJAX 调用(通过jQuery)来获取所需的数据。我还使用一个Javascript计时器(setInterval)来进行Ajax调用以获取更新的通知数据。这是我的典型Ajax调用

$.ajax({
            url: "/user/currentUserInfoAndNotifications",
            headers: {
                "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr(
                    "content"
                ),
            },
            method: "post",
            data: {
                 ...
            },

            dataType: "json",
            success: function (data) {
                // data received
                .... 
                
                }
            }.bind(this),
            error: function (data) {
                // may happen due to session timeout or other situations..
                // How to detect??
                
            }.bind(this),
        });

定时器每分钟可以调用一次 AJAX 调用,同时会话超时,调用失败。
我的问题是如何检测 AJAX 调用中的超时或其他错误条件。
此外,由于我的应用程序有100个 AJAX 调用,我希望我能在一个中心位置检测到这种情况,例如routes/web.php(我所有的路由都包含在这个文件中),这样当ajax进行调用,它来到routes/web.php,我可以检测会话超时情况,注销用户,并将用户重定向到会话超时页面。

68bkxrlz

68bkxrlz1#

您需要像这样修改error回调函数:

$.ajax({
    url: "/user/currentUserInfoAndNotifications",
    headers: {
        "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
    },
    method: "post",
    data: { ... },
    dataType: "json",
    success: function(data) {
        // Handle successful response
    },
    error: function(xhr, textStatus, errorThrown) {
        // Handle error
        if (xhr.status === 401) {
            // Session has timed out
            // Refresh page or do what you need here...
        } else {
            // Other error condition
            // Display error message or take other appropriate action
        }
    }
});

注:每次发送请求来显示通知是一种不切实际的方法,因为它可能不会导致通知在发生时立即显示。您可以通过阅读更多关于Laravel Event Broadcasting with Socket.io and Redis Example的信息来改进您处理通知的方式。

相关问题