Ghostff/Session
PHP 会话管理器(非阻塞、闪存、分段、会话加密)。使用 PHP open_ssl 进行可选的会话数据加密/解密。支持 File、MySQL、Redis 和 Memcached。
点击here查看代码。
安装
使用 composer 安装。
composer require ghostff/session
基本配置
您不需要传递任何内容来使用默认设置进行会话。您可以在 Github Readme 中阅读更多设置。
use Ghostff\Session\Session;
require 'vendor/autoload.php';
$app = Flight::app();
$app->register('session', Session::class);
// 记住的一点是,您必须在每个页面加载时提交您的会话
// 否则,您需要在您的配置中运行 auto_commit。
简单示例
这是一个简单示例,展示您如何使用它。
Flight::route('POST /login', function() {
$session = Flight::session();
// 在这里执行您的登录逻辑
// 验证密码等。
// 如果登录成功
$session->set('is_logged_in', true);
$session->set('user', $user);
// 每次写入会话时,您必须 deliberate 提交它。
$session->commit();
});
// 这个检查可以放在受限页面逻辑中,或者用中间件包装。
Flight::route('/some-restricted-page', function() {
$session = Flight::session();
if(!$session->get('is_logged_in')) {
Flight::redirect('/login');
}
// 在这里执行您的受限页面逻辑
});
// 中间件版本
Flight::route('/some-restricted-page', function() {
// 常规页面逻辑
})->addMiddleware(function() {
$session = Flight::session();
if(!$session->get('is_logged_in')) {
Flight::redirect('/login');
}
});
更复杂的示例
这是一个更复杂的示例,展示您如何使用它。
use Ghostff\Session\Session;
require 'vendor/autoload.php';
$app = Flight::app();
// 将自定义路径设置为您的会话配置文件作为第一个参数
// 或者提供自定义数组
$app->register('session', Session::class, [
[
// 如果您想将会话数据存储在数据库中(如果您想要类似“从所有设备登出”功能)
Session::CONFIG_DRIVER => Ghostff\Session\Drivers\MySql::class,
Session::CONFIG_ENCRYPT_DATA => true,
Session::CONFIG_SALT_KEY => hash('sha256', 'my-super-S3CR3T-salt'), // 请将此更改为其他内容
Session::CONFIG_AUTO_COMMIT => true, // 仅在需要时或难以提交()您的会话时才这样做。
// 另外,您可以执行 Flight::after('start', function() { Flight::session()->commit(); });
Session::CONFIG_MYSQL_DS => [
'driver' => 'mysql', # 数据库驱动程序,用于 PDO dns,例如(mysql:host=...;dbname=...)
'host' => '127.0.0.1', # 数据库主机
'db_name' => 'my_app_database', # 数据库名称
'db_table' => 'sessions', # 数据库表
'db_user' => 'root', # 数据库用户名
'db_pass' => '', # 数据库密码
'persistent_conn'=> false, # 避免每次脚本需要与数据库通信时建立新连接,从而使 Web 应用程序更快。自己找到缺点
]
]
]);
帮助!我的会话数据没有持久化!
您设置了会话数据,但它在请求之间没有持久化?您可能忘记了提交会话数据。您可以通过在设置会话数据后调用 $session->commit()
来实现。
Flight::route('POST /login', function() {
$session = Flight::session();
// 在这里执行您的登录逻辑
// 验证密码等。
// 如果登录成功
$session->set('is_logged_in', true);
$session->set('user', $user);
// 每次写入会话时,您必须 deliberate 提交它。
$session->commit();
});
另一种方法是,当您设置会话服务时,在您的配置中将 auto_commit
设置为 true
。这将在每个请求后自动提交您的会话数据。
$app->register('session', Session::class, [ 'path/to/session_config.php', bin2hex(random_bytes(32)) ], function(Session $session) {
$session->updateConfiguration([
Session::CONFIG_AUTO_COMMIT => true,
]);
}
);
另外,您可以执行 Flight::after('start', function() { Flight::session()->commit(); });
以在每个请求后提交会话数据。
文档
访问 Github Readme 以获取完整文档。配置选项在 default_config.php 文件中进行了很好的文档记录。如果您想自己查看这个包,代码很容易理解。