2013-12-19 97 views
0

CodeIgniter 2.1.3 Session Class有问题。Codeigniter无法反序列化 - 错误会破坏设置flashdata的会话

所以我注意到这个设置flashdata。在其他模块上我没有这个错误。这似乎是特定于那一个模块。

它发生在我运行form_validation时,我设置了flashdata - >在那一刻,框架想要反序列化并且出现错误 - 这破坏了我的会话。

错误日志:

Severity: Notice --> unserialize(): Error at offset 0 of 256 bytes /Applications/MAMP/htdocs/ges/system/libraries/Session.php 727 

我试图CI的所有新的会话类,也试图反序列化之前修剪。但它仍然会杀死我的会话。

这里是我的控制器的部分代码(我不得不改变一些变种名称,造成安全):

<?php 

public function add($reg = false) 
{ 

     if (!$reg) 
       redirect('tickets'); 

     restrict_access(array(1,4), '/'); 
     $url = url_ci_decrypt($reg); 
     parse_str($url, $url_data); 

     $data    = $this->session_user->getSessionUserData(); 
     $data['title']  = 'XXXXX'; 
     $data['reg']   = $url_data; 
     $data['reg']['name'] = $this->tickets_model->getTicketTypeText($url_data['type']); 
     $data['reasons']  = $this->tickets_model->getTicketReasons(); 

     $this->form_validation->set_rules('message', 'Message', 'trim|required|min_length[20]|max_length[2000]'); 

     if ($this->form_validation->run() && $this->input->post()) { 
       $posted = $this->input->post(); 
       $newdata = array(
         'x1' => $this->session->userdata['x1'], 
         'x2' => $this->session->userdata['x2'], 
         'x3' => $url_data['x3'], 
         'x4' => $url_data['x4'], 
         'x5' => 0, 
         'x6' => $posted['text'] 
         ); 
       $result = $this->tickets_model->addTicket($newdata); 
       if ($result === true) { 
         $this->session->set_flashdata('msg', 'message1'); 
       } else { 
         $this->session->set_flashdata('msg', 'message2'); 
       } 
       redirect('/'); 
     } else if ($this->input->post()) { 
       $posted  = $this->input->post(); 
       $data['text'] = strip_tags($posted['message']); 
     } 

     /* loading views */ 
} 

// some more modules... 

这里还为会话我的配置部分:

$config['sess_cookie_name'] = 'user_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = true; 
$config['sess_encrypt_cookie'] = true; 
$config['sess_use_database'] = true; 
$config['sess_table_name']  = 'user_sessions'; 
$config['sess_match_ip']   = false; 
$config['sess_match_useragent'] = true; 
$config['sess_time_to_update'] = 300; 
+2

您要存储多少数据? Cookie有一个4Kb限制IIRC。如果序列化的字符串被截断,则无法正确反序列化它 –

+0

它小于4Kb。我使用的是UTF-8,字符串长度大约是500-600个字符。 但是,如果'sess_encrypt_cookie'是'false',它工作正常! - 但这将是一个很大的安全问题... – CodeBrauer

回答

2

它的作品后,我将“ci_session”表中所有列的“排序规则”从“latin1_swedish_ci”更改为“latin2_general_ci”。

我来自波兰,所以在我的国家语言中,我有像“ł”,“ś”等字母。当我用这些字母添加一些flashdata时,它被替换为“?”并在反序列化后,我有一个错误。

请检查您的项目。

+0

哦 - 感谢您的评论 - 我会检查! – CodeBrauer