在Laravel 5.1中更改会话文件名

时间:2016-01-11 07:08:13

标签: php session laravel-5.1

当有人访问/ storage / framework / sessions文件夹中的网站时,Laravel会保存自己的会话文件。这些会话文件的每个名称都是随机生成的字母数字唯一名称。但是,我想以某种方式重命名文件并为它提供我自己的自定义名称。我有两种选择。

  • 创建会话文件后,手动更改文件名(通过创建,复制,替换)
  • 找到随机生成字母数字名称的函数,并使用我自己的方式为每个文件设置一个唯一名称进行更改(此方法可能会减少并发症)

我的主要目标是将每个用户的会话文件重命名为他们自己的用户ID,该用户ID存储在我的数据库中。因此名称仍然是唯一的,唯一的区别是我可以比使用随机字母数字名称更容易搜索文件。

所以如果有人知道我怎么能做上述任何一种方法,或者如果你能想到一种更好的方法来实现同样的方法,那就太好了。任何帮助是极大的赞赏!

编辑:决定在这里更新我最终决定做的事情。我决定不使用Laravel生成的内置会话文件,并意识到创建自己的文件更容易,只是让每个客户端访问它。谢谢大家!

3 个答案:

答案 0 :(得分:1)

  

Laravel有几个管理创建的Manager类   基于驱动程序的组件。这些包括缓存,会话,   身份验证和队列组件。经理班负责   用于创建基于的特定驱动程序实现   应用程序的配置。例如,SessionManager类可以   创建文件,数据库,Cookie和各种其他实现   会话驱动程序。

     

这些经理中的每一个都包含可用于的扩展方法   轻松地将新的驱动程序解析功能注入管理器。

     

要使用自定义会话驱动程序扩展Laravel,我们将使用   extend方法来注册我们的自定义代码:

您应该将会话扩展代码放在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) {}

}

或者您可以从FileSessionHandler扩展MyFileHandler并覆盖相关方法。

扩展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

答案 1 :(得分:0)

如果您的最终目标是搜索会话文件名;你不需要改变它们。 您可以将会话文件名保存在数据库表(或您选择的其他文件)中。您可以使用this link获取文件名。

一栏 - &gt;存储会话文件名

其他专栏 - &gt;存储您想要的其他信息

通过这种方式,您可以使用SQL搜索和查找更快的文件。

答案 2 :(得分:0)

使用中间件进行请求

\Illuminate\Session\Middleware\StartSession::class

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

});