当有人访问/ storage / framework / sessions文件夹中的网站时,Laravel会保存自己的会话文件。这些会话文件的每个名称都是随机生成的字母数字唯一名称。但是,我想以某种方式重命名文件并为它提供我自己的自定义名称。我有两种选择。
我的主要目标是将每个用户的会话文件重命名为他们自己的用户ID,该用户ID存储在我的数据库中。因此名称仍然是唯一的,唯一的区别是我可以比使用随机字母数字名称更容易搜索文件。
所以如果有人知道我怎么能做上述任何一种方法,或者如果你能想到一种更好的方法来实现同样的方法,那就太好了。任何帮助是极大的赞赏!
编辑:决定在这里更新我最终决定做的事情。我决定不使用Laravel生成的内置会话文件,并意识到创建自己的文件更容易,只是让每个客户端访问它。谢谢大家!
答案 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);
}
}
您可以在扩展框架文档的会话部分找到更多信息。
答案 1 :(得分:0)
如果您的最终目标是搜索会话文件名;你不需要改变它们。 您可以将会话文件名保存在数据库表(或您选择的其他文件)中。您可以使用this link获取文件名。
一栏 - &gt;存储会话文件名
其他专栏 - &gt;存储您想要的其他信息
通过这种方式,您可以使用SQL搜索和查找更快的文件。
答案 2 :(得分:0)
使用中间件进行请求
\Illuminate\Session\Middleware\StartSession::class
Route::group(['middleware' => [\Illuminate\Session\Middleware\StartSession::class]], function () {
});