yiisoft / session
一个会话服务,PSR-15 会话中间件,以及一个帮助使用一次性消息的服务。
Requires
- php: ^8.0
- psr/http-message: ^1.0|^2.0
- psr/http-message-implementation: 1.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- yiisoft/cookies: ^1.0
Requires (Dev)
- maglnet/composer-require-checker: ^4.2
- nyholm/psr7: ^1.4
- phpunit/phpunit: ^9.5
- rector/rector: ^1.0.0
- roave/infection-static-analysis-plugin: ^1.16
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^4.30|^5.6
- yiisoft/di: ^1.1
Suggests
- ext-session: Allows using native PHP sessions
This package is auto-updated.
Last update: 2024-09-09 18:18:30 UTC
README
Yii Session
该包实现了一个会话服务、PSR-15 会话中间件,以及一个帮助使用一次性消息的服务。
要求
- PHP 8.0 或更高版本。
安装
该包可以使用 Composer 安装。
composer require yiisoft/session
为了在请求之间保持会话,您需要将 SessionMiddleware
添加到您的路由组或应用程序中间件中。当您在同一个应用程序中既有基于令牌的身份验证的 API 路由又有常规的 Web 路由时,应优先使用路由组。这样做可以避免启动 API 端点的会话。
Yii 3 配置
为了为特定组的路由添加会话,请按照以下方式编辑 config/routes.php
use Yiisoft\Router\Group; use Yiisoft\Session\SessionMiddleware; return [ Group::create('/blog') ->middleware(SessionMiddleware::class) ->routes( // ... ) ];
要为整个应用程序添加会话,请按照以下方式编辑 config/application.php
return [ Yiisoft\Yii\Http\Application::class => [ '__construct()' => [ 'dispatcher' => DynamicReference::to(static function (Injector $injector) { return ($injector->make(MiddlewareDispatcher::class)) ->withMiddlewares( [ ErrorCatcher::class, SessionMiddleware::class, // <-- add this CsrfMiddleware::class, Router::class, ] ); }), ], ], ];
通用用法
您可以通过 SessionInterface
访问会话数据。
public function actionProfile(\Yiisoft\Session\SessionInterface $session) { // get a value $lastAccessTime = $session->get('lastAccessTime'); // get all values $sessionData = $session->all(); // set a value $session->set('lastAccessTime', time()); // check if value exists if ($session->has('lastAccessTime')) { // ... } // remove value $session->remove('lastAccessTime'); // get value and then remove it $sessionData = $session->pull('lastAccessTime'); // clear session data from runtime $session->clear(); }
如果您需要一些数据在会话中保留到读取为止,例如在显示下一页上的消息时,您需要的是闪存消息。闪存消息是一种特殊类型的数据,它仅在当前请求和下一个请求中可用。之后,它将自动删除。
FlashInteface
的用法如下
/** @var Yiisoft\Session\Flash\FlashInterface $flash */ // request 1 $flash->set('warning', 'Oh no, not again.'); // request 2 $warning = $flash->get('warning'); if ($warning !== null) { // do something with it }
打开和关闭会话
public function actionProfile(\Yiisoft\Session\SessionInterface $session) { // start session if it's not yet started $session->open(); // work with session // write session values and then close it $session->close(); }
注意:尽早关闭会话是一个好习惯,因为许多会话实现都在会话打开时阻止其他请求。
还有两种关闭会话的方法
public function actionProfile(\Yiisoft\Session\SessionInterface $session) { // discard changes and close session $session->discard(); // destroy session completely $session->destroy(); }
自定义会话存储
当使用 Yiisoft\Session\Session
作为会话组件时,您可以提供自己的存储实现
$handler = new MySessionHandler(); $session = new \Yiisoft\Session\Session([], $handler);
自定义存储必须实现 \SessionHandlerInterface
。
文档
如果您需要帮助或有任何问题,请访问 Yii 论坛。您还可以查看其他 Yii 社区资源。
许可
Yii Session 是免费软件。它根据 BSD 许可证发布。有关更多信息,请参阅 LICENSE
。
由 Yii Software 维护。