laraveladmin无法超时自动退出登录

1. 运行环境

1). 当前使用的 Laravel 版本?

8.83.27

2). 当前使用的 php/php-fpm 版本?

PHP 版本:php7.4

php-fpm 版本:

3). 当前系统

win7

4). 业务环境

开发和生成环境都无法超时自动退出登录

5). 相关软件版本

2. 问题描述?

laraveladmin设置了SESSION_LIFETIME=120,但是到期后并不会自动退出登录。只要登录一次,会话就会一直有效,直到主动退出登录

3. 您期望得到的结果?

SESSION到期后自动退出登录;

4. 您实际得到的结果?

到期后并不会自动退出登录

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 17

是不是登录的时候设置了remember_token,我记得如果设置了remember_token登录失效时间是5年

7个月前 评论
L1174179743 (楼主) 7个月前

SESSION_LIFETIME 不是干这个用的

7个月前 评论
L1174179743 (楼主) 7个月前

config/session.php 文件里 lifetime 设置时间 然后同文件 expire_on_close 选项设置为 true

7个月前 评论
飞飞鱼 (作者) 7个月前
L1174179743 (楼主) 7个月前

或者~

也可以使用 auth 配置文件来设置 timeout 选项。打开 config/auth.php 文件,并找到 providers 数组中的 users 驱动。在该驱动下添加 timeout 选项中设置(以分钟为单位)。

   'providers' => [
       'users' => [
           'driver' => 'eloquent',
           'model' => App\Models\User::class,
           'timeout' => 30, // 设置为 30 分钟
       ],
   ],

这样的话~~用户在指定的时间内没有任何活动,系统会自动退出登录。

7个月前 评论
L1174179743 (楼主) 7个月前
飞飞鱼 (作者) 7个月前
L1174179743 (楼主) 7个月前
飞飞鱼 (作者) 7个月前
L1174179743 (楼主) 7个月前

@L1174179743

  1. config/session.php文件,先将lifetime设置为1

  2. 搞个中间件

    php artisan make:middleware CheckAdminTimeout
  3. CheckAdminTimeout中间件中,添加检测:

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\Auth;
    
    class CheckAdminTimeout
    {
        public function handle($request, Closure $next)
        {
            if (Auth::check() && !session('lastActivityTime')) {
                session(['lastActivityTime' => time()]);
            } elseif (Auth::check() && time() - session('lastActivityTime') > config('session.lifetime') * 60) {
                Auth::logout();
                session()->flush();
                return redirect('/login')->with('timeout', '您已超时退出登录');
            }
    
            session(['lastActivityTime' => time()]);
    
            return $next($request);
        }
    }
  4. 打开app/Http/Kernel.php文件,在$routeMiddleware里把刚才的中间件注册进来:

    protected $routeMiddleware = [
        // ...
        'admin.timeout' => \App\Http\Middleware\CheckAdminTimeout::class,
    ];
  5. 路由文件中routes/web.php,需要超时检查的路由组包在admin.timeout中。例如:

    Route::middleware(['admin.timeout'])->group(function () {
        // 这里放需要超时检查的路由
    });
  6. 最后 登录页resources/views/auth/login.blade.php

     @if (session('timeout'))
         <div class="alert alert-danger">
             {{ session('timeout') }}
         </div>
     @endif

    这样试试吧~~

7个月前 评论

用的是不是chrome浏览器

7个月前 评论
L1174179743 (楼主) 7个月前
Biubug (作者) 7个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!