5

根据文档在codeigniter 4中,我们必须将库加载为

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

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

<?php
namespace App\Controllers;

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

    class Home extends BaseController
    {

    }

我无法在任何函数中访问 $session 变量,即使我在 __construct 中编写了它,如果我编写任何函数,它在任何函数中都无法访问,那么只有它在工作,但我想全局设置它。

4

4 回答 4

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 = session();
$userName = $session->get('username');

您不必为了使用session()总是加载和可用加载“帮助程序”。

于 2020-04-30T14:50:32.493 回答
2

我解决了,如下

<?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");

    }

    //--------------------------------------------------------------------

}
于 2020-04-29T12:23:52.057 回答
2

在“initController”函数中在 Base Controller 上全局启动会话

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

在任何地方使用它

$this->session->set('title','value');
于 2021-05-12T08:15:01.260 回答
0

另一种解决方案是这样使用:

`session()->get('name');// With this you can use any session value anywhere in the application `
于 2021-03-02T07:42:17.097 回答