Laravel 注销时清除会话的侦听器不工作
Laravel Listener to clear Session on logout is not working
我想在我的 Laravel 项目中放置一个侦听器,它侦听用户注销并触发事件,例如重定向或清除会话。
我有这个代码,我添加到 EventServiceProvider.php:
<?php
namespace App\Providers;
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\SomeEvent' => [
'App\Listeners\EventListener',
],
'App\Listeners\Logout' => [
'App\Listeners\ClearSessionAfterUserLogout'
],
];
/**
* Register any other events for your application.
*
* @param \Illuminate\Contracts\Events\Dispatcher $events
* @return void
*/
public function boot(DispatcherContract $events)
{
parent::boot($events);
}
}
然后,我将以下代码放入 app/Listeners/ClearSessionAfterUserLogout:
<?php
namespace App\Listeners;
use Session;
use App\Classes\Helper;
class ClearSessionAfterUserLogout{
public function handle(Logout $event){
Session::flush();
Session::set('configuration', NULL);
Helper::unloadConfiguration();
return redirect('/');
}
}
?>
我放入 ClearSessionAfterUserLogout 的任何东西似乎都没有用。我知道函数 "unloadConfiguration()" 确实有效,因为我在其他地方使用过它。 (它只是清除指定的 Session 变量)。刷新会话也没有任何作用。因为当我使用另一个帐户登录时,仍然会根据前一个帐户的会话中的内容加载某些内容。
所以我的问题是:如何在用户注销时清除所有会话数据?
默认情况下 Laravel 会触发一个 Illuminate\Auth\Events\Logout
事件,因此您应该监听它:
protected $listen = [
'Illuminate\Auth\Events\Logout' => [
'App\Listeners\ClearSessionAfterUserLogout',
],
];
我想在我的 Laravel 项目中放置一个侦听器,它侦听用户注销并触发事件,例如重定向或清除会话。
我有这个代码,我添加到 EventServiceProvider.php:
<?php
namespace App\Providers;
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\SomeEvent' => [
'App\Listeners\EventListener',
],
'App\Listeners\Logout' => [
'App\Listeners\ClearSessionAfterUserLogout'
],
];
/**
* Register any other events for your application.
*
* @param \Illuminate\Contracts\Events\Dispatcher $events
* @return void
*/
public function boot(DispatcherContract $events)
{
parent::boot($events);
}
}
然后,我将以下代码放入 app/Listeners/ClearSessionAfterUserLogout:
<?php
namespace App\Listeners;
use Session;
use App\Classes\Helper;
class ClearSessionAfterUserLogout{
public function handle(Logout $event){
Session::flush();
Session::set('configuration', NULL);
Helper::unloadConfiguration();
return redirect('/');
}
}
?>
我放入 ClearSessionAfterUserLogout 的任何东西似乎都没有用。我知道函数 "unloadConfiguration()" 确实有效,因为我在其他地方使用过它。 (它只是清除指定的 Session 变量)。刷新会话也没有任何作用。因为当我使用另一个帐户登录时,仍然会根据前一个帐户的会话中的内容加载某些内容。
所以我的问题是:如何在用户注销时清除所有会话数据?
默认情况下 Laravel 会触发一个 Illuminate\Auth\Events\Logout
事件,因此您应该监听它:
protected $listen = [
'Illuminate\Auth\Events\Logout' => [
'App\Listeners\ClearSessionAfterUserLogout',
],
];