Laravel 实现用户登录久了自动退出登录

在写一个 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 存储在文件的时候,更是慢。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容