我正在使用 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 请求都被视为一次用户交互,这可以防止会话过期。
您可以使用 .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);