如何声明全局变量会话数据

时间:2014-05-20 09:21:12

标签: php codeigniter session global

这是我的控制器。我需要使用上面的三行作为全局变量。这样所有功能都可以使用它。我该怎么做?

class Some_Controller extends CI_Controller {

    $this->load->library('session'); //Must be global                     
    $this->session->set_userdata('email', 'email@hp.com'); //Must be global
    $data['current_user']=$this->session->userdata('email'); //Must be global


   public function index(){

    $data['people'] = $this->some_model->getPeople();
    $data['mapList'] = $this->some_model->getMapped();
    $data['appServList'] = $this->some_model->getApp_serv();


    $this->load->view('templates/header.php',$data);
    $this->load->view('some_page/index.php',$data);
    /*Serves as the homepage. Shows the list for services, mapped services to an application and the list for application,
    from here you can easily add edit and hide items*/

}

3 个答案:

答案 0 :(得分:1)

要自动启动会话,您可以在autoload.php中设置$autoload['libraries'] = array('session');。一旦您在session中设置了数据,就可以在任何地方使用它。 要在会话中设置数据,您不需要在全局范围内执行此操作,您可以在登录功能中执行此操作。之后在控制器中的当前位置放置public $current_email=$this->session->userdata('email');

current_email访问$this->current_emai;您想要的地方。

访问您可以执行的视图中的变量

$objCI =& get_instance(); //now CI object can be used
echo $objCI->current_email; 

答案 1 :(得分:0)

只需将该变量声明为公共

class Some_Controller extends CI_Controller {

//添加可供本类中所有函数使用的全局变量。

    public $global_variable = "global_example";

    $this->load->library('session'); //Must be global       $this->session->set_userdata('email', 'email@hp.com'); //Must be global
    $data['current_user']=$this->session->userdata('email'); //Must be global


   public function index(){




    $data['people'] = $this->some_model->getPeople();
    $data['mapList'] = $this->some_model->getMapped();
    $data['appServList'] = $this->some_model->getApp_serv();


    $this->load->view('templates/header.php',$data);
    $this->load->view('some_page/index.php',$data);
    /*Serves as the homepage. Shows the list for services, mapped services to an application and the list for application,
    from here you can easily add edit and hide items*/

}

答案 2 :(得分:-1)

这里有两点值得注意:

首先和不相关的一个,你需要在成功的认证过程之后设置这样的会话数据,而不是每次都在一般控制器的顶部。

第二个也是重要的一个,我理解你所说的全局变量。当您开始设计应用程序时,您会感到需要多个种类的控制器。例如,您可能有Admin_ControllerBackoffice_ControllerAjax_Controller个控制器。有些人可能扩展其他人所以,当你说全局变量时,我认为你需要这样的机制。因此,您在父控制器中设置一个变量,它将在您的应用程序的所有派生控制器中可用。我建议您为所有应用程序控制器创建一个Base_Controller作为父控制器,其中包含所有其他控制器的通用逻辑/数据。

但重点是CodeIgniter默认情况下不支持控制器继承。查看CI Base Controllers项目并阅读文档。它将帮助您实现您的需求,以及更好的面向DRY的应用程序设计。