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