Codeigniter:传递数据时重定向

Codeigniter: redirecting while passing data

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

目前,人们只需进入我的网站。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");
    }
}

我希望这能澄清我的问题

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

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');

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

控制器 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");
    }
}

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