Laravel应用程序动态更改会话路径

Sau*_*nam 6 php laravel laravel-5

laravel应用程序URL将是类似的app.laravel.com\{clientName}.client_name例如app.laravel.com\{clientName}\home,所有路线都将遵循app.laravel.com\{clientName}\profile.将加载/渲染应用程序取决于clientName.

routes/web.php

Route::group(['prefix' => '{clientName}', 'middleware' => 'appclient'], function () {
    Route::get('/', 'ClientController@index');
    Route::post('login', 'Auth\LoginController@login');
    Route::post('logout', 'Auth\LoginController@logout');
    Route::get('home', 'HomeController@index');
});
Run Code Online (Sandbox Code Playgroud)

appclient中间件中

public function handle($request, Closure $next) {
    $clientName = explode('/', $request->path())[0];
    $client = Client::where('clientName', $clientName)->first();

    if(!isset($client->id)) {
        abort(404);
    }

    Config::set('session.path', "/$clientName");

    return $next($request);
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是根据clientName目录设置会话.当我登录时,我收到了TokenMismatchException.

第一个问题

我可以根据目录存储基于url的会话app.laravel.com\{clientName}吗?

第二个问题

我看到有一个设置session.path,我尝试的是使用这种方法.如果可以,我该如何解决这个问题?更新中间件中的会话路径是个好主意吗?

欣赏任何反馈或其他方法

UPDATE

  • 使用Redis如Session驱动
  • 在我的进一步调查中,每次生成新的请求会话令牌

Sau*_*nam 3

我所做的是动态更新session.path& session.cookie

Config::set('session.path', "$clientName");
Config::set('session.cookie', $clientName.'_laravel_session');
Run Code Online (Sandbox Code Playgroud)

目前这对我有用。