2017-03-16 102 views
2

我正在使用PHP和codeigniter。我试图在会话中设置一个变量。codeigniter中的会话值

控制器

defined('BASEPATH') OR exit('No direct script access allowed'); 

class Welcome extends CI_Controller { 

public function __construct(){ 

     parent::__construct(); 
     $this->config->base_url(); 
     $this->load->library('session'); 

     if(!$this->session->has_userdata('zoo')) 
     { 

     $fooBar = md5(uniqid(rand(), TRUE));//generates random number 
     $newdata = array(
        'username' => 'nirali', 
        'zoo' => $fooBar 
      ); 
     $this->session->set_userdata($newdata);  
     exit; 
     } 
} 

public function read_session(){  

     $array = $this->session->all_userdata(); 
     print_r($array); 
     exit; 
} 

} 

在第一次请求构造的setter方法会被执行并且它填补会话变量。并因退出而停止执行;声明。

当我打电话read_session()它打印

Array ([__ci_last_regenerate] => 1489646422 [username] => nirali [zoo] => 531d8bfb21ed21b83bc7e3763a04f88c) 

,当我回忆起read_session()它打印

Array ([__ci_last_regenerate] => 1489647898 [username] => nirali [zoo] => cb675bee85da672c95166dbc1dbbdfd2) 

我得到预计的用户名来nirali价值 - 所有的好 但对于动物园我总是得到不同的价值,我期待同一届会议相同的价值


更新

在进一步的调试,我发现。服务器没有回应任何cookie作为回应。

enter image description here

出了什么问题,其中不发送任何会话cookie回响应服务器配置?

+0

尝试$ foobar的= MD5(uniqid(RAND(),TRUE));从if语句中获取此行。 –

+0

@ Shahid如何帮助?是不是它只是在每次请求时调用它(与OP设置时相反)? –

+0

@JigarJoshi不确定。这就是为什么我在评论中提出建议并没有发布答案 –

回答

1

试试这个:

if(! $this->session->userdata('zoo')) 
{ 
    $fooBar = md5(uniqid(rand(), TRUE));//generates random number 
    $newdata = array(
       'username' => 'nirali', 
       'zoo' => $fooBar 
    ); 
    $this->session->set_userdata($newdata); 
}