Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更改Laravel 5.1中的会话文件名_Php_Session_Laravel 5.1 - Fatal编程技术网

Php 更改Laravel 5.1中的会话文件名

Php 更改Laravel 5.1中的会话文件名,php,session,laravel-5.1,Php,Session,Laravel 5.1,因此,当有人访问网站时,Laravel会将自己的会话文件保存在/storage/framework/sessions文件夹中。这些会话文件的每个名称都是随机生成的字母数字唯一名称。但是,我想以某种方式重命名这些文件,并为其指定自己的自定义名称。我有两个选择 创建会话文件后手动更改文件名(通过创建、复制、替换) 找到随机生成字母数字名称的函数,并用我自己的方法更改它,为每个文件设置一个唯一的名称(这种方法可能不会太复杂) 我的主要最终目标是将每个用户的会话文件重命名为他们自己的userid,该

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

  • 创建会话文件后手动更改文件名(通过创建、复制、替换)
  • 找到随机生成字母数字名称的函数,并用我自己的方法更改它,为每个文件设置一个唯一的名称(这种方法可能不会太复杂)
我的主要最终目标是将每个用户的会话文件重命名为他们自己的userid,该userid存储在我的数据库中。因此,名称仍然是唯一的,唯一的区别是,我可以搜索文件比如果他们有随机的字母数字名称更容易

所以,如果有人知道我如何做到上述任何一种方法,或者如果你能想出更好的方法来达到同样的效果,那就太好了。非常感谢您的帮助

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

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

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

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

您应该将会话扩展代码放在AppServiceProvider的引导方法中

实现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();
        });
    }
}
<?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);
        });
    }
}

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

一栏->存储会话文件名

其他列->存储所需的其他信息


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

对请求使用中间件

\Illuminate\Session\Middleware\StartSession::class

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

});

谢谢你的回复。但是,文件的命名具体发生在哪里?它是启动功能中的“myfile”部分吗?如果是这样的话,通过在那里使用“myfile”,它不会是所有会话文件的静态名称,因为我怀疑boot不会被多次调用吗?我遗漏了什么吗?当然,这是另一种选择。但这需要创建新文件,并将会话信息存储在其中,甚至存储在数据库中。我的需求将需要我连续运行查询以从数据库中检索,几乎每5-10秒一次。文件可能更快,但我想如果我可以通过任何方式访问现有文件,为什么要创建新文件并执行相同的操作?
<?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);
    }
}
\Illuminate\Session\Middleware\StartSession::class

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

});