Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing session file names in Laravel 5.1

So Laravel saves it's own session files when someone accesses the website in the /storage/framework/sessions folder. Each of these session file's names are a randomly generated alpha numeric unique name. But, I'd like to somehow rename the files and give my own custom name for it. I've got two options for that.

  • Change the file name manually once the session file is created (by a create, copy, replace)
  • Find the function which randomly generates the alphanumeric name and change it with my own way of setting a unique name to each file (this method might come with less complications)

My main end goal is to rename each user's session file to their own userid that's stored in my db. So the names are still unique, the only difference is that I can search through the files easier than if they had random alphanumeric names.

So if anyone knows how I could do any of the above methods or if you can think of a better way to achieve the same, it'd be great. Any help is greatly appreciated!

EDIT: Decided to update here with what I had decided to do finally. I decided not to use the built in session files generated by Laravel and realized it's much easier to make my own file and just have each client access it instead. Thanks to all!

like image 679
Izy- Avatar asked Jan 11 '16 07:01

Izy-


1 Answers

Laravel has several Manager classes that manage the creation of driver-based components. These include the cache, session, authentication, and queue components. The manager class is responsible for creating a particular driver implementation based on the application's configuration. For example, the SessionManager class can create File, Database, Cookie and various other implementations of session drivers.

Each of these managers includes an extend method which may be used to easily inject new driver resolution functionality into the manager.

To extending Laravel with a custom session driver, we will use the extend method to register our custom code:

You should place your session extension code in the boot method of your AppServiceProvider.

Implement SessionHandlerInterface

app/Providers/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();
        });
    }
}

Note that our custom session driver should implement the SessionHandlerInterface. This interface contains just a few simple methods we need to implement.

app/Handlers/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) {}

}

Or you can extend MyFileHandler from FileSessionHandler and override relevant methods.

Extend FileSessionHandler

app/Providers/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);
        });
    }
}

app/Handlers/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);
    }
}

You can find more in Session section of Extending the framework document.

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

like image 153
Pradeep Sanjaya Avatar answered Oct 12 '22 22:10

Pradeep Sanjaya