Codeigniter在使用会话

时间:2015-07-19 13:54:48

标签: php codeigniter session cloudflare

我正在使用带有cloudflare的Codeigniter,并在登录期间在会话中存储用户值时收到520错误。

这是登录功能:

function check_login_submit($post_data) {
        if ($post_data) {

            $mob = trim($post_data['mob']);
            $password = trim($post_data['password']);

            $sql = "Select * from table where phone='$mob' and password='$password'";
            $query = $this->db->query($sql);
            $user = $query->row();

            if ($query->num_rows() == 1) {
            if ($user->status == 1)
            {


                $this->session->set_userdata('mem_id', $user->id);

                $this->session->set_userdata('mem_last_login_date', $user->last_login_date);

                $this->session->set_userdata('mem_created_on', $user->created_on);
                //-- Update last login of successfull Login
                $sql = "update table set last_login_date = NOW() where id=$user->id";
                $query = $this->db->query($sql);
                return TRUE;
            } 

                        }

            else {
                return FALSE;
            }

        }
    }

如果我将存储值停止到会话用户数据,那么它将正常工作但是会话cloudflare给我502错误页面。

请指教 提前感谢您的时间和支持。

2 个答案:

答案 0 :(得分:1)

如果有其他人遇到此问题,我想出了一个解决方案,该解决方案涉及扩展核心会话库,最终减少对sess_write()_set_cookie()的扩展调用次数。

<强> MY_Session.php:

class MY_Session extends CI_Session {

    function set_userdata($newdata = array(), $newval = '', $write_session = true)
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => $newval);
        }

        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                $this->userdata[$key] = $val;
            }
        }

        // Do not write the session (set the cookies) unless explicitly specified
        if ($write_session) {
            $this->sess_write();
        }
    }

    function set_flashdata($newdata = array(), $newval = '')
    {
        if (is_string($newdata))
        {
            $newdata = array($newdata => $newval);
        }

        if (count($newdata) > 0)
        {
            foreach ($newdata as $key => $val)
            {
                $flashdata_key = $this->flashdata_key.':new:'.$key;
                $this->set_userdata($flashdata_key, $val, false); // Do not update the cookie in the foreach
            }
        }

        // Save the cookie now that all userdata has been set
        $this->sess_write();
    }

    function _flashdata_mark()
    {
        $userdata = $this->all_userdata();
        $newUserData = array();
        $userDataToUnset = array();
        foreach ($userdata as $name => $value)
        {
            $parts = explode(':new:', $name);
            if (is_array($parts) && count($parts) === 2)
            {
                $new_name = $this->flashdata_key.':old:'.$parts[1];
                $newUserData[$new_name] = $value;
                $userDataToUnset[$name] = '';
                // Cookies were originally set in this loop. Moved to the end of the function
            }
        }

        // Save all changes outside of the loop
        if (count($newUserData) > 0) {
            $this->set_userdata($newUserData);
            $this->unset_userdata($userDataToUnset);
        }
    }
}

答案 1 :(得分:0)

520错误通常表示返回的大型cookie或标头在我们的终端上达到了代理缓冲区限制。 HAR file发送给我们的支持团队将帮助我们找出问题所在。