Изменение имен файлов сеанса в Laravel 5.1

Итак, Laravel сохраняет свои собственные файлы сеанса, когда кто-то обращается к веб-сайту в папке /storage/framework/sessions. Каждое из этих имен файлов сеансов представляет собой произвольно генерируемое альфа-числовое уникальное имя. Но я хотел бы как-то переименовать файлы и указать свое собственное имя. У меня есть два варианта.

  • Изменение имени файла вручную после создания файла сеанса (путем создания, копирования, замены)
  • Найдите функцию, которая произвольно генерирует буквенно-цифровое имя и меняет его собственным способом установки уникального имени для каждого файла (этот метод может иметь меньше осложнений)

Моя главная цель - переименовать каждый файл сеанса пользователя в свой собственный идентификатор пользователя, который хранится в моем db. Таким образом, имена по-прежнему уникальны, единственное отличие состоит в том, что я могу искать файлы легче, чем если бы у них были случайные буквенно-цифровые имена.

Итак, если кто-нибудь знает, как я могу сделать любой из вышеперечисленных методов, или если вы можете думать о лучшем способе достижения того же, было бы здорово. Любая помощь очень ценится!

EDIT: решил обновить здесь то, что я решил сделать в конце концов. Я решил не использовать встроенные файлы сеансов, созданные Laravel, и понял, что сделать мой собственный файл намного проще, и вместо этого каждый клиент обратится к нему. Спасибо всем!

Ответ 1

В Laravel есть несколько классов Менеджера, которые управляют созданием основанные на драйверах. К ним относятся кеш, сеанс, аутентификации и компонентов очереди. Класс менеджера отвечает для создания конкретной реализации драйвера на основе конфигурации приложения. Например, класс SessionManager может создать файл, базу данных, cookie и различные другие реализации сеансовых драйверов.

Каждый из этих менеджеров включает метод расширения, который может использоваться для легко вставляйте новые функции разрешения драйвера в диспетчер.

Чтобы расширить Laravel с помощью специального драйвера сеанса, мы будем использовать расширьте способ регистрации нашего пользовательского кода:

Вы должны поместить код расширения сеанса в метод загрузки вашего AppServiceProvider.

Внедрить SessionHandlerInterface

Приложение/Поставщики/AppServiceProvider.php

<?php
namespace App\Providers;

use Session;
use Illuminate\Support\ServiceProvider;
use App\Handlers\MyFileHandler;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Session::extend('file', function($app)
        {
            return new MyFileHandler();
        });
    }
}

Обратите внимание, что наш пользовательский драйвер сеанса должен реализовать SessionHandlerInterface. Этот интерфейс содержит всего несколько простых методов, которые нам нужно реализовать.

Приложение/Манипуляторы/MyFileHandler.php

<?php
namespace App\Handlers;

use SessionHandlerInterface;

class MyFileHandler implements SessionHandlerInterface {

    public function open($savePath, $sessionName) {}
    public function close() {}
    public function read($sessionId) {}
    public function write($sessionId, $data) {}
    public function destroy($sessionId) {}
    public function gc($lifetime) {}

}

Или вы можете расширить MyFileHandler из FileSessionHandler и переопределить соответствующие методы.

Расширить FileSessionHandler

Приложение/Поставщики/AppServiceProvider.php

<?php
namespace App\Providers;

use Session;
use Illuminate\Support\ServiceProvider;
use Illuminate\Session\FileSessionHandler;
use App\Handlers\MyFileHandler;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Session::extend('file', function($app)
        {
            $path = $app['config']['session.files'];
            return new MyFileHandler($app['files'], $path);
        });
    }
}

Приложение/Манипуляторы/MyFileHandler.php

<?php
namespace App\Handlers;

use Illuminate\Filesystem\Filesystem;
use Illuminate\Session\FileSessionHandler;

class MyFileHandler extends FileSessionHandler
{
    public function __construct(Filesystem $files, $path)
    {
        parent::__construct($files, $path);
    }
}

Более подробную информацию можно найти в разделе "Расширение рамки" раздела "Сессия".

https://laravel.com/docs/5.0/extending#session

Ответ 2

Если ваша конечная цель - поиск имен файлов сеанса; вам не нужно их менять. Вы можете сохранить имена файлов сеанса в таблице базы данных (или другой файл по вашему выбору). Вы можете использовать эту ссылку для получения имен файлов.

Один столбец → сохранить имена файлов сеанса

другие столбцы → сохраните другую информацию, которую вы хотите

Таким образом вы можете искать и находить более быстрые файлы с использованием SQL.

Ответ 3

используйте промежуточное ПО для запроса

\Illuminate\Session\Middleware\StartSession::class

Route::group(['middleware' => [\Illuminate\Session\Middleware\StartSession::class]], function () {

});