【问题标题】:Codeigniter 3.1.7 is losing session when this is called through a method通过方法调用 Codeigniter 3.1.7 正在丢失会话
【发布时间】:2018-04-04 05:31:41
【问题描述】:

我有一个方法可以检索之前在方法中创建的会话。此方法从 AJAX 调用,类似于:

public function Confirmar() {
   print_r($this->session->userdata);
}

会话之前是通过同一控制器中的一种方法创建的,即:

public function Token($token) {
    $params = array('tokenvalido' => true, 'token_de_cambio' => $token, 'user_mail' => $TokenValido->user_mail);
    $this->session->set_userdata($params);
}

当我在Token 方法中创建var_dump($this->session->userdata) 时,我得到了这个响应:

Array ( [__ci_last_regenerate] => 1522819707 [tokenvalido] => 1 [token_de_cambio] => 5ac44d3e7dc5cd0d11e2edbdb34ae13f05d60c3b64978 [user_mail] => babasonicofernando@gmail.com )

但是当我调用 Confirmar() 方法(存在于我创建会话的同一控制器中)时,它显示的是一个空数组。

我做错了什么?

【问题讨论】:

  • 你不要在Comfirmar中调用$param。你试过使用$this->session->set_userdata($params); 吗?或者您可以将其作为控制器中的公共变量放入构造函数中。
  • 嗨。我编辑了我的问题,修改了我在 var_dump 响应中得到的内容
  • Tbh 我以前听说过这个问题(几周前在堆栈上两次 - 类似的问题)并且 真的 真的很难找出根本原因这不是一个普遍的问题。我建议尝试将您的会话保存在数据库中,看看是否可以缓解问题。您也可以尝试更改会话 cookie 名称。由于某种原因,我还听说过 AJAX 发挥了作用,但据说这在 CI 3.0 中已修复。奇怪的问题,你试过不同的浏览器吗?
  • 感谢您的回答。我还没有在其他浏览器中尝试过,但我会的。所以,我也会尝试将会话保存在表格中的解决方案,我希望它有效。

标签: php codeigniter session codeigniter-3


【解决方案1】:

userdata 是方法,因此您必须在 .所以改变你的代码如下

public function Confirmar() {
   print_r($this->session->userdata());
}

【讨论】:

  • 嗨。 $this->session->userdata 工作正常,因为正在检索数据
  • 即使使用$this->session->userdata() 仍然无法正常工作
  • 奇怪的是,OP 偶然发现了会话类的 $userdata 属性,它充当了 $_SESSION 的别名
【解决方案2】:

你可以试试:

print_r($this->session->userdata('token_de_cambio'))

【讨论】:

    【解决方案3】:

    在这之后,我注意到在 php.ini 中启用 session.auto_start 指令,问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-12
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      相关资源
      最近更新 更多