gpt4 book ai didi

php - 在 Laravel 5.1 中更改 session 文件名

转载 作者:可可西里 更新时间:2023-10-31 22:51:42 25 4
gpt4 key购买 nike

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

  • 创建 session 文件后手动更改文件名(通过创建、复制、替换)
  • 找到随机生成字母数字名称的函数,并用我自己的方式更改它,为每个文件设置一个唯一的名称(这种方法可能不会那么复杂)

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

因此,如果有人知道我如何执行上述任何方法,或者如果您能想出更好的方法来实现同样的效果,那就太好了。任何帮助是极大的赞赏!

编辑:决定在这里更新我最终决定要做的事情。我决定不使用 Laravel 生成的内置 session 文件,并意识到制作我自己的文件并让每个客户端访问它要容易得多。感谢大家!

最佳答案

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:

您应该将 session 扩展代码放在 AppServiceProvider 的启动方法中。

实现 SessionHandlerInterface

应用/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();
});
}
}

请注意,我们的自定义 session 驱动程序应实现 SessionHandlerInterface .该接口(interface)仅包含我们需要实现的几个简单方法。

应用程序/处理程序/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

应用/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);
});
}
}

应用程序/处理程序/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);
}
}

您可以在扩展框架文档的 session 部分找到更多信息。

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

关于php - 在 Laravel 5.1 中更改 session 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34715910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com