开发学院

您的位置:首页>技术文章>正文

技术文章

CodeIgniter4设置session变量为公共变量

开发学院2022-05-10 19:13:20

  在codeigniter 4中如果想访问session,根据文档,我们必须首先声明

$session = \Config\Services::session();

  如果我把它写在控制器名称的上面

<?php
namespace App\Controllers;

    $session = \Config\Services::session();

    class Home extends BaseController
    {

    }

  我不能在任意位置访问$session变量,即使我在_construct中写了它,它也不是随处可用的,我只能在使用的时候事先声明它,但是我想对它进行全局设置,有何办法?

解决方案1

<?php
namespace App\Controllers;
class Home extends BaseController
{
    protected $session;

    function __construct()
    {

        $this->session = \Config\Services::session();
        $this->session->start();
    }

    public function code4()
    {
        $newdata = [
                'username'  => 'johndoe',
                'email'     => 'johndoe@some-site.com',
                'logged_in' => TRUE
        ];

        $this->session->set($newdata); // setting session data
        echo $this->session->get("username");
    }
}

解决方案2

  您可以在任何需要的地方使用函数session()。这是访问会话实例的便捷方法。

session(); // instantiate the session class

  如果不传递参数,它将返回一个会话类实例。如果共享实例存在,它将返回一个共享实例;如果不存在,它将返回一个新创建的实例。

  一旦会话被实例化,使用$_SESSION是设置会话数据的最有效方式。

$_SESSION['username']  = 'johndoe';
$_SESSION['email']     = 'johndoe@some-site.com';
$_SESSION['logged_in'] = TRUE;

  传递参数可以获取指定键的数据

$userName = $session('username');

  或者,您可以像这样使用会话方法。

$session = session();
$userName = $session->get('username');

  无需加载助手函数来使用它,session()总是被自动加载和可用的。