Php 如何使用codeigniter的不同方法访问会话?

Php 如何使用codeigniter的不同方法访问会话?,php,session,codeigniter,Php,Session,Codeigniter,我是codeigniter的新手。 如何在控制器中使用会话对象将值从一个方法传递到另一个方法 我已在构造函数类中加载库: $this->load->library('session'); 第一功能: public function display() { $data = array( 'word' => 'hello' ); $this->session->set_userdata($data); } public function validate() { $

我是codeigniter的新手。 如何在控制器中使用会话对象将值从一个方法传递到另一个方法

我已在构造函数类中加载库:

$this->load->library('session');
第一功能:

public function display()
{
$data = array(
'word' => 'hello'
);
$this->session->set_userdata($data);
}
public function validate()
{
$word_generated = $this->session->userdata('word');
}
第二功能:

public function display()
{
$data = array(
'word' => 'hello'
);
$this->session->set_userdata($data);
}
public function validate()
{
$word_generated = $this->session->userdata('word');
}
但是我无法在第二个方法中访问会话值

如果我使用相同的方法访问会话,代码工作正常:

public function display()
{
$data = array(
'word' => 'hello'
);
$this->session->set_userdata($data);
$word_generated = $this->session->userdata('word');
}
我不能用第二种方法访问它吗?请导游。。非常感谢

为了从一个方法到另一个方法(或从一页到另一页)访问会话数据,您应该执行重定向

例如:

public function display() {
    $data = array(
        'word' => 'hello'
    );
    $this->session->set_userdata($data);
    redirect('your_controller/validate');
 }

 public function validate() {
     $word_generated = $this->session->userdata('word');
 }
class Your_controller extends CI_Controller {
    public $word;
    public function display() {
       $this->word = 'hello';
       $this->validate();
    }

    public function validate() {
       $word_generated = $this->word;
    }
}
class Your_controller extends CI_Controller {
    public $word;
    public function display() {
       $this->validate('hello');
    }

    public function validate($word='') {
       $word_generated = $word;
    }
}
如果您只是试图在同一个调用中与同一控制器中的两个方法共享一个变量,则有两个选项:

1。为控制器类设置公共属性:

public function display() {
    $data = array(
        'word' => 'hello'
    );
    $this->session->set_userdata($data);
    redirect('your_controller/validate');
 }

 public function validate() {
     $word_generated = $this->session->userdata('word');
 }
class Your_controller extends CI_Controller {
    public $word;
    public function display() {
       $this->word = 'hello';
       $this->validate();
    }

    public function validate() {
       $word_generated = $this->word;
    }
}
class Your_controller extends CI_Controller {
    public $word;
    public function display() {
       $this->validate('hello');
    }

    public function validate($word='') {
       $word_generated = $word;
    }
}
2。只需正常地将变量传递给方法:

public function display() {
    $data = array(
        'word' => 'hello'
    );
    $this->session->set_userdata($data);
    redirect('your_controller/validate');
 }

 public function validate() {
     $word_generated = $this->session->userdata('word');
 }
class Your_controller extends CI_Controller {
    public $word;
    public function display() {
       $this->word = 'hello';
       $this->validate();
    }

    public function validate() {
       $word_generated = $this->word;
    }
}
class Your_controller extends CI_Controller {
    public $word;
    public function display() {
       $this->validate('hello');
    }

    public function validate($word='') {
       $word_generated = $word;
    }
}

希望对您有所帮助。

使用CI 1.7.x,我在我的webapp中发现一个错误,它刚刚停止读取我的会话数据。我所做的更正是将config.php中的$config['sess\u encrypt\u cookie']更改为TRUE;它又开始工作了。当然,在日志文件中会不断出现cookie损坏错误


希望对您有所帮助

您的代码看起来不错。你检查过你正在使用的机器上是否启用了cookies吗?我想是的。。在我的config.php中,我有以下条目$配置['sess_cookie_name']=“ci_会话”$配置['sess_expiration']=7200$config['sess\u expire\u on\u close']=FALSE$config['sess\u encrypt\u cookie']=FALSE$config['sess_use_database']=FALSE$配置['sess_table_name']=“ci_sessions”$配置['sess\u match\u ip']=FALSE$config['sess\u match\u useragent']=TRUE$配置['sess_time_to_update']=300;这些是默认值,也可以。尝试使用firebug之类的工具来检查Cookie是否已实际设置。1)您是否向我们显示控制器代码或自定义库代码?这是控制器代码。。