SESSION从视图中丢失

时间:2012-03-12 06:23:31

标签: php codeigniter

按照上面的标题,当我用超链接触发控制器时,它会运行控制器功能,但是在从控制器重定向后我无法获得SESSION的值。代码如下......

function langpref($lang){       
    $this->load->helper('url');
    redirect(ABSOLUTE_PATH, 'location');        

    $this->session->set_userdata('cur_lang', 'xxx');        
}   

*注意:ABSOLUTE_PATH是超链接的常量,我已经在自动加载文件中加载了SESSION库。

在我的视图文件中,我编写了如下代码......

<?php echo $this->session->userdata('cur_lang');?>

并且它不会打印出SESSION值。

3 个答案:

答案 0 :(得分:1)

第一种方法:您无法访问此类会话变量

<?php $ci =& get_instance(); ?>
<div>
   <?php echo $ci->session->userdata('cur_lang') ?>
</div>  

第二种方法:另一种方法是将会话数据传递给视图

在您的控制器上

$data['userdata'] = $this->session->userdata;
$this->load->view('your/view', $data); 

在你的观点

echo $userdata['cur_lang'];

答案 1 :(得分:1)

不应该是:


function langpref($lang){       
    $this->load->helper('url');
    $this->session->set_userdata('cur_lang', 'xxx');

    redirect(ABSOLUTE_PATH, 'location');
}   

在你看来:


<?php echo $this->session->userdata("cur_lang"); ?>

答案 2 :(得分:-1)

会话是全局变量。如果你想在课堂或功能中使用它。你需要通过传递会话变量作为函数参数来访问它。或者您需要使用全局命令。例如;

class XXX{
   public function processSession($_SESSION){
      return $_SESSION['xx'];
   }
}

或者您可以使用全局指令

class XXX{
   public function processSession(){
      global $_SESSION;
      return $_SESSION['xx'];
   }
}

其他方式是在函数

中启动会话
class XXX{
   public function processSession(){
      session_start();
      $_SESSION['xx'] = 'aaaa';
      return $_SESSION['xx'];
   }
}

另外,你不能在函数或类函数中访问会话变量