Laravel 中用户会话过期时显示警报

问题描述 投票:0回答:1

我正在使用 Laravel 框架,希望在会话过期时创建警报。我尝试实现一个 JavaScript 代码,检查用户是否每三秒登录一次,如下所示:

var refreshIntervalId = setInterval(function () {
    $.ajax({
        url: '/check-auth',
        type: 'GET',
        cache: false,
        success: function(response) {
            if (!response.authenticated) {
                swal("Sua sessão expirou. Por favor, faça login novamente!", "", "warning")
                .then(function(){ 
                    window.location.href = window.origin + '/login';
                });
                clearInterval(refreshIntervalId);
            } 
        },
        error: function(xhr, status, error) {
            console.error('AJAX request failed:', status, error);
        }
    });
}, 3000);

此外,我创建了一条路由来检查用户是否登录:

Route::middleware('bypass.session')->get('/check-auth', function () {
    return response()->json(['authenticated' => auth()->check()]);
});

有没有更好的方法来实现这一目标?当前逻辑会在浏览器中累积缓存,每个 AJAX 请求都被视为一次用户交互,这可以防止会话过期。

javascript php jquery laravel
1个回答
0
投票

您可以使用 .env 文件中的

SESSION_LIFETIME
值(以分钟为单位)更改间隔 默认
SESSION_LIFETIME
值为 120 分钟,那么在 setInterval 中必须大于 120 分钟(例如 121 分钟),以免用户再次交互。

var refreshIntervalId = setInterval(function () {
    $.ajax({
        url: '/check-auth',
        type: 'GET',
        cache: false,
        success: function(response) {
            if (!response.authenticated) {
                swal("Sua sessão expirou. Por favor, faça login novamente!", "", "warning")
                .then(function(){ 
                    window.location.href = window.origin + '/login';
                });
                clearInterval(refreshIntervalId);
            } 
        },
        error: function(xhr, status, error) {
            console.error('AJAX request failed:', status, error);
        }
    });
}, 7260000);
© www.soinside.com 2019 - 2024. All rights reserved.