1session的使用

2020-04-15  本文已影响0人  rosekissyou

按照文档的指示

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

上一篇下一篇

猜你喜欢

热点阅读