按照文档的指示
https://hyperf.wiki/#/zh-cn/session?id=session-%e4%bc%9a%e8%af%9d%e7%ae%a1%e7%90%86
1 首先在项目内按照session
composer require hyperf/session
2 然后在手动配置 config/autoload/session.php
我这边的配置文件如下
use Hyperf\Session\Handler;
$driver = env('SESSION_DRIVER', 'file');
if ($driver == 'file') {
$handler = Handler\FileHandler::class;
}
if ($driver == 'redis') {
$handler = Handler\RedisHandler::class;
}
return [
'handler' => $handler,
'options' => [
'connection' => 'session',
'path' => BASE_PATH . '/runtime/session',
'gc_maxlifetime' => 60 * 60 * 24 * 3, // 3天
],
];
也可以采取自动生成,在项目内运行 php bin/hyperf.php vendor:publish hyperf/session
这个命令会自动生成 config/autoload/session.php
默认采用文件驱动,上面我的改成了Redis驱动
3 中间件配置为 HTTP Server 的全局中间件
config/autoload/middleware.php
里面加上一行代码
return [
// 这里的 http 对应默认的 server name,如您需要在其它 server 上使用 Session,需要对应的配置全局中间件
'http' => [ \Hyperf\Session\Middleware\SessionMiddleware::class, ],];
4 代码设置使用session
use Hyperf\Contract\SessionInterface;
use Hyperf\Di\Annotation\Inject;//引入@Inject注解 这个一定要,文档里面没有说要,但是没有的话会报错
/**
* @Controller()
*/
class LoginController extends BaseController
{
/**
* @Inject()
* @var \Hyperf\Contract\SessionInterface
*/
private $session;
// Hyperf 会自动为此方法生成一个 /home/login/hello 的路由,允许通过 GET 或 POST 方式请求
/**
* @RequestMapping(path="hello", methods="get,post")
*/
public function hello()
{
// 直接设置session参数
$this->session->set('foo', 'bar');
$session_data = $this->session->get('foo');
return 'session:' .$session_data;
}
这样运行会看到设置的session和获取到的session
网友评论