【问题标题】:codeigniter session data in two controller methods两个控制器方法中的codeigniter会话数据
【发布时间】:2020-01-13 19:37:03
【问题描述】:

我有这两个控制器方法都设置会话数据

//Profile
public function profile()
{
    $this->session->set_userdata('title', 'some_value');
}
//KYC
public function kyc()
{
    $this->session->set_userdata('title', 'KYC');
    $this->load->view('basic/basic_app_views/kyc');
}

我首先加载函数kyc 并在我的视图中使用会话

<title><?php echo $this->session->userdata('title'); ?></title>

然后我在浏览器中加载profile 并刷新kyc,但kyc 中的值仍然是KYC,就像我在kyc 函数中设置的那样。

为什么title 的值在另一个控制器函数中重置后仍然有KYC 的值?。

【问题讨论】:

  • 在第二次设置之前尝试unset($_SESSION['title'])
  • 您好,感谢您的评论。我知道我可以像你说的那样取消设置,但这就是我感兴趣的原因。会话变量是函数独有的,这就是问题所在。
  • 您的个人资料方法中没有视图,因此您什么也看不到。每次加载 kyc 时,您都将标题设置为 KYC,这将始终显示在您正在使用的视图中。在您提供的代码中,仅 kyc 显示任何内容,并且标题将始终为 KYC。所以我不确定你期望发生什么?您的个人资料使用什么视图?
  • @TimBrownlaw 我正在测试一个函数中设置的会话变量是否可以修改另一个函数中的现有数据集。到目前为止,情况似乎并非如此。
  • 您可以用 100 种不同的方法设置标题会话值,但是每次调用/刷新 kyc 时,标题将始终设置为 KYC,这正是代码所做的。您需要做的是检查是否已经设置了标题会话,如果是,请忽略 kyc 方法中的那个。会话变量与其他任何变量一样,但它们是“持久的”。您的测试代码完全按照您的要求执行。除非我遗漏了什么,否则我不确定您为什么会期望它有所不同。

标签: php codeigniter


【解决方案1】:

这是因为每次你调用你的函数时,它都会按照它定义的方式设置用户数据。

当尝试在页面中设置标题时,我建议您改为这样做。

//Profile
public function profile()
{
    $data['title'] = 'Profile Page';
    $this->load->view('basic/basic_app_views/kyc', $data);
}
//KYC
public function kyc()
{
    $data['title'] = 'KYC Page';
    $this->load->view('basic/basic_app_views/kyc', $data);
}

然后在您的 kyc.php 文件中调用它。

<title><?php echo $title; ?></title>

希望有帮助。

【讨论】:

  • OP 担心使用会话。在这种用例中,它们不是要走的路。你的答案是正确的方法。
【解决方案2】:

要查看会话标题变量的变化,您需要稍微修改一下代码...

所以你的

//Profile
public function profile()
{
    $this->session->set_userdata('title', 'some_value');
}
//KYC
public function kyc()
{
    $this->session->set_userdata('title', 'KYC');
    $this->load->view('basic/basic_app_views/kyc');
}

类似...

//Profile
public function profile()
{
    $this->session->set_userdata('title', 'some_value');
    $this->load->view('basic/basic_app_views/kyc');     // View the title value
}
//KYC
public function kyc()
{
    $this->session->set_userdata('title', 'KYC');
    $this->load->view('basic/basic_app_views/kyc');     // View the title value
}

这样你就会看到你的价值发生了变化。您的两种方法中的每一种都单独更改值。但在您之前的代码中,只有 kyc 显示它。

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2017-05-08
    • 2015-01-06
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多