【问题标题】: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 中编写它也无法在任何函数中访问,如果我编写任何函数,那么只有它在工作,但我想全局设置它。

【问题讨论】:

    标签: php codeigniter codeigniter-4


    【解决方案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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        • 2015-08-03
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多