lithemod / session
管理用户会话,允许您在请求之间存储和检索持久和临时信息,例如登录数据、首选项和短期数据。
v1.0.1
2024-10-03 01:00 UTC
Requires
- php: ^8.0
- lithemod/flow: ^1.0
- lithemod/log: ^1.0
- lithemod/session-support: ^1.0
Requires (Dev)
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2024-10-03 01:00:47 UTC
README
Lithe的会话中间件负责管理用户会话,允许您在请求之间存储和检索持久信息,例如登录数据和首选项。
1. 安装会话中间件
要在Lithe中使用会话中间件,您需要通过Composer安装它。Composer是PHP的依赖管理工具。
步骤
-
打开终端(命令行).
-
导航到您的项目目录。使用
cd
命令将目录更改为您的Lithe项目所在的目录。例如cd /path/to/your/project
-
运行安装命令:
composer require lithemod/session
此命令将下载并安装会话中间件及其依赖项。
2. 配置会话中间件
安装中间件后,您需要在Lithe应用程序中配置它。这通过使用use()
方法来完成。
示例配置
use function Lithe\Middleware\Session\session; // Add the middleware to the application $app->use(session());
配置参数
您可以使用一些重要参数配置会话中间件
- lifetime:以秒为单位设置会话持续时间。默认为2592000(30天)。
- domain:设置会话cookie有效的域名。
- secure:指示会话cookie是否只能通过安全连接(HTTPS)发送。
- httponly:如果它只能通过HTTP请求访问。
- samesite:定义会话cookie的SameSite属性。可以是
'Lax'
、'Strict'
或'None'
。 - path:定义会话文件将存储的路径。
带参数的示例配置
$app->use(session([ 'lifetime' => 3600, // 1 hour 'domain' => 'example.com', 'secure' => true, // Only over HTTPS 'httponly' => true, // Accessible only via HTTP 'samesite' => 'Strict', // SameSite policy 'path' => 'storage/framework/session', // Path to store sessions ]));
3. 使用会话变量
配置后,您可以通过Request
对象访问和操作会话变量。让我们看看如何通过路由来实现这一点。
路由示例
以下是一些如何在Lithe路由中使用会话变量的示例。
设置会话变量
$app->get('/set-user', function ($req, $res) { $req->session->put('user', 'John Doe'); // Set the session variable return $res->send('User set in the session!'); });
检索会话变量
$app->get('/get-user', function ($req, $res) { $user = $req->session->get('user', 'User not found'); // Retrieve the session variable return $res->send('User: ' . $user); });
删除会话变量
$app->get('/remove-user', function ($req, $res) { $req->session->forget('user'); // Remove the session variable return $res->send('User removed from the session!'); });
销毁所有会话变量
$app->get('/destroy-session', function ($req, $res) { $req->session->destroy(); // Destroy all session variables return $res->send('All session variables have been destroyed!'); });
检查会话是否活动
$app->get('/check-session', function ($req, $res) { $isActive = $req->session->isActive(); // Check if the session is active return $res->send('Session active: ' . ($isActive ? 'Yes' : 'No')); });
重新生成会话ID
$app->get('/regenerate-session', function ($req, $res) { $req->session->regenerate(); // Regenerate the session ID return $res->send('Session ID regenerated!'); });
获取会话ID
$app->get('/session-id', function ($req, $res) { $sessionId = $req->session->getId(); // Get the session ID return $res->send('Session ID: ' . $sessionId); });
设置新的会话ID
$app->get('/set-session-id', function ($req, $res) { $req->session->setId('newSessionId'); // Set a new ID for the session return $res->send('New session ID set!'); });
获取所有会话变量
$app->get('/all-session-data', function ($req, $res) { $allSessionData = $req->session->all(); // Get all session variables return $res->send('Session data: ' . json_encode($allSessionData)); });
检查会话变量是否存在
$app->get('/has-user', function ($req, $res) { $hasUser = $req->session->has('user'); // Check if the session variable 'user' exists return $res->send('User in session: ' . ($hasUser ? 'Yes' : 'No')); });
4. 魔法方法
会话对象还提供了一些方便的魔法方法
-
__get($key)
:检索会话变量的值。$user = $req->session->user; // Equivalent to $req->session->get('user');
-
__set($key, $value)
:设置会话变量的值。$req->session->user = 'Jane Doe'; // Equivalent to $req->session->put('user', 'Jane Doe');
最终考虑
- 创建会话目录:中间件确保存储会话的目录存在。如果不存在,它将自动创建。
- 错误处理:如果在会话配置或初始化过程中发生任何错误,中间件将记录它们并正常继续执行。