【问题标题】:Cant access codeigniter session variable until page refresh在页面刷新之前无法访问 codeigniter 会话变量
【发布时间】:2012-10-16 06:14:35
【问题描述】:

我正在使用 codeigniter 构建电子商务网站。 我在控制器上有一个方法,用户在结帐前输入他们的交付信息,该方法保存交付信息并创建一个名为“orderid”的新会话变量,它的值是 orderid 的值。设置会话变量后,该方法重定向到结帐控制器,我从会话中检索“orderid”以从数据库中检索订单,以便用户在付款前确认信息。

问题是,当用户被重定向到结帐页面时,他们看不到他们的交付数据。 什么时候做这个

echo $this->session->userdata('orderid');

我可以看到价值 但是当我将它传递给我应该返回数据数组的方法时

$order = $this->orders->get_order($this->session->userdata('orderid'));
print_r($order);

我得到一个空数组array()

当结帐页面刷新时,它的行为正确。 可能是什么问题

【问题讨论】:

  • 你把 echo 声明放在哪里了?是在get_order 方法调用之前吗?我有点猜测您实际上是在调用该方法之后设置了值。

标签: php codeigniter session


【解决方案1】:

为了使会话正常工作,您必须将 $this->load->library('session'); 添加到您的 __contruct() 函数中

public function __construct() {
parent::__contruct();
$this->load->library('session');
}

【讨论】:

  • -1 Codeigniter 不使用传统的 PHP 会话。它实际上将它的“会话”数据存储在 cookie 中(或者如果您设置了它,则存储在数据库中)。因此,无需添加 session_start()
【解决方案2】:

你不能像这样访问会话值

$order = $this->orders->get_order($this->session->userdata('orderid'));

你可以使用下面的方法,它会为你工作的很好

$orderid=$this->session->userdata('orderid');
$order = $this->orders->get_order($orderid);

**请记住在构造函数或此函数中加载会话库

$this->load->library('session');

【讨论】:

  • Kemal Fadillah 我的代码有什么问题请解释一下
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2019-04-25
  • 2015-03-21
相关资源
最近更新 更多