代码点火器:在传递数据时重定向


Codeigniter: redirecting while passing data

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

目前,即使没有他们登录,人们也只需要输入 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");
    }
}

我希望这能澄清我的问题

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

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

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

如果我

正确理解您的问题,要重定向到另一个控制器,您可以使用该方法

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