美文网首页
Laravel用户停留过久无任何操作时自动退出登录

Laravel用户停留过久无任何操作时自动退出登录

作者: 最底层的技术渣 | 来源:发表于2019-05-24 00:06 被阅读0次
    写在最前面的话:在写一个 Web 应用的时候,很多人都遇到过这样的需求:如何实现在一个用户登录进来之后,停留时间过久(页面没有操作和活动),我们就自动将用户退出登录?

    解决办法其实很简单,我们在Laravel中自定义一个Middleware 就可以实现:

    namespace App\Http\Middleware;
    
    use Closure;
    
    class SessionTimeout {
    
        protected $timeout = 1200;
        public function handle($request, Closure $next) {
            $isLoggedIn = $request->path() != 'logout';
            if(! session('lastActivityTime')){
                app('session')->put('lastActivityTime', time());
            } elseif(time() - app('session')->get('lastActivityTime') > $this->timeout){
                app('session')->forget('lastActivityTime');
                $cookie = cookie('intend', $isLoggedIn ? url()->current() : 'home');
                $email = $request->user()->email;
                auth()->logout();
                return route('login')->withInput(['email' => $email])->withCookie($cookie);
            }
            $isLoggedIn ? app('session')->put('lastActivityTime', time()) : app('session')->forget('lastActivityTime');
            return $next($request);
        }
    
    }
    
    我们主要是通过 lastActivityTime 这个记录来判断用户是否有对应的操作(刷新页面或者是访问新的页面等),如果在 20 分钟内没有操作的话,我们就会跳转到登录页面。

    备注:

    这样的解决方案其实记录的 session 值会很多,消耗一定的性能,特别是你的session 存储在文件的时候,更是慢。

    相关文章

      网友评论

          本文标题:Laravel用户停留过久无任何操作时自动退出登录

          本文链接:https://www.haomeiwen.com/subject/mhucnqtx.html