Codeigniter无法反序列化 - 错误会在设置flashdata时破坏会话

时间:2013-12-19 16:43:19

标签: php codeigniter session codeigniter-2

我遇到CodeIgniter 2.1.3会话类的问题。

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

当我运行form_validation并设置flashdata时,会发生这种情况 - >在那一刻,框架想要反序列化并得到错误 - 这会破坏我的会话。

错误日志:

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

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

这是我的控制器的部分代码(我必须更改一些var名称导致安全性):

<?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;

1 个答案:

答案 0 :(得分:2)

在我将“ci_session”表中的所有列中的“排序规则”从“latin1_swedish_ci”更改为“latin2_general_ci”后,它可以正常工作。

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

请在项目中查看。