Codeigniter:在传递数据时重定向

时间:2015-01-26 08:10:35

标签: php codeigniter redirect

有没有办法确保只有成员才能访问成员控制器?

目前,即使没有他们登录,人们也只需输入mywebsite.com/member即可进入。

这是我的主控制器代码:

public function members(){
        if ($this->session->userdata('is_logged_in')){
            redirect('member');
        } else {
            redirect('main/restricted');
        }
    }

这是我的会员控制器代码:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Member extends CI_Controller {

    public function index() {
        $this->load->view("site_header");
        $this->load->view("member");
        $this->load->view("site_nav");
        $this->load->view("site_footer");
    }
}

我希望这能澄清我的问题

2 个答案:

答案 0 :(得分:2)

在您的情况下,我建议您使用闪存数据。将存储在会话中,但仅适用于下一页加载。

控制器1:

$data = "your data or array";
$this->session->set_flashdata('key',$data);
redirect('controller2/method');

控制器2:

$data = $this->session->flashdata('key');

如果您需要将其保留用于其他页面加载:

$this->session->keep_flashdata('key');

要保护成员控制器,您可以执行以下操作:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Member extends CI_Controller {

    public function __construct(){
        parent::__construct();
        if (! $this->session->userdata('is_logged_in')){
            redirect('main/restricted');
        }
    }

    public function index() {
        $this->load->view("site_header");
        $this->load->view("member");
        $this->load->view("site_nav");
        $this->load->view("site_footer");
    }
}

然后,您还可以使用上面的闪存数据代码将错误消息传回公共控制器。

答案 1 :(得分:0)

如果我理解你的问题,要重定向到另一个控制器,你可以使用方法

redirect('/controller/method');

如果您需要访问会话变量,首先必须在第一个控制器中设置数据

$this->load->library('session');
$this->session->set_userdata(array(
                        'new_var'       => 'data value',
                ));

并从其他控制器(会员)检索

$this->load->library('session');
$new_var  = $this->session->userdata('new_var');