Laravel监听器在注销时清除会话不起作用

时间:2016-07-26 10:13:30

标签: laravel session events listener

我想在我的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中的任何内容似乎都没有效果。函数&#34; unloadConfiguration()&#34;我知道一个事实是有效的,因为我在其他地方使用它。 (它只是清除指定的Session变量)。刷新会话也没有任何作用。因为当我使用其他帐户登录时,某些内容会根据之前帐户的会话内容进行加载。

所以我的问题是:当用户退出时,如何清除所有会话数据?

1 个答案:

答案 0 :(得分:1)

默认情况下,Laravel会触发Illuminate\Auth\Events\Logout事件,因此您应该听取它:

protected $listen = [
    'Illuminate\Auth\Events\Logout' => [
        'App\Listeners\ClearSessionAfterUserLogout',
    ],
];