如何从 Laravel 中的所有设备自动注销所有用户?
How to automatically logout all users from all devices in Laravel?
我花了 2 个小时尝试自动注销用户,但无论我做什么,我都无法强制用户在 24 小时后注销。
成功登录后,我有一个 cookie,如下所示
Name: remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d
Content: eyJpdiI6IkE4aFU0RCtVNkhwK3VMbGJ0ZndVUFE9PSIsInZhbHVlIjoidExYTG9tUUc5RkVQUkhjaU80a1wvdHFXcDk4eUxsaG5SRmxLVXp5c1JMdFJlYzFLZ3ZValBoQkhaY1hkKzFqcHIraDROZE5wU0s0K00wRDlMSVExMk50cUxNK2xzMzgrdmx4VW1hZ1paWVpJPSIsIm1hYyI6Ijc2NDZiYTI2MTU1NTA0YjZjMjA4ZmY1ZmU2MzdmZGFhYzdkMWU4NTRmNzEwYzIwZjRkN2E3ZDNlMDQyNWQ5N2QifQ%3D%3D
Created: Tuesday, December 12, 2017 at 6:55:00 PM
Expires: Sunday, December 11, 2022 at 6:55:00 PM
我的 session.php 文件看起来像这样
'driver' => env('SESSION_DRIVER', 'database'),
'lifetime' => 1,
'expire_on_close' => false,
我的 env 文件是这样的
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=database
QUEUE_DRIVER=sync
我的php.ini看起来像这样
session.gc_maxlifetime=14
我试着改变
'driver' => env('SESSION_DRIVER', 'database'),
文件、cookie、redis 都没有用。
为什么我无法从所有设备上注销用户?
您可以在 /app/config/session.php
文件中更改空闲会话过期的时间段。
24Hrs = 1440 minutes
'lifetime' => 1440,
'expire_on_close' => false,
或者,如果上述方法不适合您,您也可以这样做,
我们将手动删除会话文件夹并清除用户 table 中的所有 remember_tokens。
创建 new command flush:session
。
在命令的句柄方法中执行:
use App\User;
use File;
public function handle()
{
File::cleanDirectory(storage_path().'/framework/sessions');
User::query()->update(['remember_token' => '']);
}
然后 schedule 每个午夜 运行 这个命令
$schedule->command('flush:session')->daily();
P.S 如果你想立即测试一下,只需 运行
php artisan flush:session
在终端中,您的所有用户都应该注销!
我花了 2 个小时尝试自动注销用户,但无论我做什么,我都无法强制用户在 24 小时后注销。
成功登录后,我有一个 cookie,如下所示
Name: remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d
Content: eyJpdiI6IkE4aFU0RCtVNkhwK3VMbGJ0ZndVUFE9PSIsInZhbHVlIjoidExYTG9tUUc5RkVQUkhjaU80a1wvdHFXcDk4eUxsaG5SRmxLVXp5c1JMdFJlYzFLZ3ZValBoQkhaY1hkKzFqcHIraDROZE5wU0s0K00wRDlMSVExMk50cUxNK2xzMzgrdmx4VW1hZ1paWVpJPSIsIm1hYyI6Ijc2NDZiYTI2MTU1NTA0YjZjMjA4ZmY1ZmU2MzdmZGFhYzdkMWU4NTRmNzEwYzIwZjRkN2E3ZDNlMDQyNWQ5N2QifQ%3D%3D
Created: Tuesday, December 12, 2017 at 6:55:00 PM
Expires: Sunday, December 11, 2022 at 6:55:00 PM
我的 session.php 文件看起来像这样
'driver' => env('SESSION_DRIVER', 'database'),
'lifetime' => 1,
'expire_on_close' => false,
我的 env 文件是这样的
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=database
QUEUE_DRIVER=sync
我的php.ini看起来像这样
session.gc_maxlifetime=14
我试着改变
'driver' => env('SESSION_DRIVER', 'database'),
文件、cookie、redis 都没有用。
为什么我无法从所有设备上注销用户?
您可以在 /app/config/session.php
文件中更改空闲会话过期的时间段。
24Hrs = 1440 minutes
'lifetime' => 1440,
'expire_on_close' => false,
或者,如果上述方法不适合您,您也可以这样做,
我们将手动删除会话文件夹并清除用户 table 中的所有 remember_tokens。
创建 new command flush:session
。
在命令的句柄方法中执行:
use App\User;
use File;
public function handle()
{
File::cleanDirectory(storage_path().'/framework/sessions');
User::query()->update(['remember_token' => '']);
}
然后 schedule 每个午夜 运行 这个命令
$schedule->command('flush:session')->daily();
P.S 如果你想立即测试一下,只需 运行
php artisan flush:session
在终端中,您的所有用户都应该注销!