我正在尝试实现一种检查用户会话是否已过期的方法,然后弹出一个让用户知道的模式。
这是我到目前为止所拥有的。
路线
Route::get('auth-check', ['uses' => 'UsersController@authCheck', 'as' => 'auth.check']);
UsersController
use Illuminate\Contracts\Auth\Guard;
class UsersController extends Controller {
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
...
/*
* returns {status: false} or {status: true}
*/
public function authCheck()
{
return response(['status' => $this->auth->check()])
->header('Content-Type', 'application/json');
}
}
主刀片(因此可以在任何页面上查看)
<!-- Modal -->
<div class="modal fade" id="session-expired">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Session Expired!</h4>
</div>
<div class="modal-body">
<p>Your session has expired, please login to continue.</p>
</div>
<div class="modal-footer">
<a href="{!! route('login') !!}" class="btn btn-danger">Login</a>
</div>
</div>
</div>
</div>
JS
@if(Auth::check())
$.fn.timer = function()
{
$.get("{{ route('auth.check') }}", function (data) {
data.status == false ? $('#session-expired').modal({ show: true, backdrop: 'static' }) : $('#session-expired').modal('hide');
});
};
window.setInterval(function(){
$('#timedOutSession').timer();
},10000);
@endif
它有点工作,当我登录时它返回{status: true}
。但是在检查auth用户的5-10个请求之后,会话因某种原因而死亡,并返回{status: false}
。就像制作如此多的身份验证一样,会议将会话视为一种安全措施。
让用户知道他们的会话是否已经过期的任何人都在乱搞?原因是应用程序非常基于表单,用户可能会打开表单页面并在第二天返回并且会话已过期但是他们将完成填写冗长表单的过程并提交它以找出它们没有登录。
任何想法或更好的方法都非常受欢迎。