ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在写一个 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 存储在文件的时候,更是慢。