codeigniter 4 设置会话变量 $session = \Config\Services::session();全球

Posted

技术标签:

【中文标题】codeigniter 4 设置会话变量 $session = \\Config\\Services::session();全球【英文标题】:codeigniter 4 set session variable $session = \Config\Services::session(); globallycodeigniter 4 设置会话变量 $session = \Config\Services::session();全球 【发布时间】:2020-08-13 09:40:54 【问题描述】:

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

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

    

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


【讨论】:

是的,可以。您无需调用会话开始。当您尝试在视图中调用会话变量时 - 使用 Common.php "helper" session();阅读它。 @TimBrownlaw 你对你提到的 Common.php “helper” session() 有任何参考吗?我没有从谷歌那里得到任何有用的反馈。谢谢! @user752746 你可以在实际文件本身中找到代码和cmets。【参考方案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() 始终已加载且可用。

【讨论】:

谢谢。编码的中间部分有点偏离轨道。但是第一部分和最后一部分很棒。它就像魔术一样工作,现在我不必一次又一次地使用会话变量和类【参考方案3】:

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

`session()->get('name');// With this you can use any session value anywhere in the application `

【讨论】:

【参考方案4】:

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

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

在任何地方使用它

$this->session->set('title','value');

【讨论】:

以上是关于codeigniter 4 设置会话变量 $session = \Config\Services::session();全球的主要内容,如果未能解决你的问题,请参考以下文章

如何向用户显示会话过期消息(CodeIgniter 框架)?

Codeigniter 3 会话不适用于 PHP 7.1.4

PHP:在视图中显示会话变量:CodeIgniter

如何获取 codeigniter 会话 userdata 变量的值?

手动设置会话过期时间-CodeIgniter

如何在 Codeigniter 中检查是不是设置了会话?