2013-12-19 85 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