2015-07-19 3 views
1

Я использую Codeigniter с облачным флагом и получаю 520 ошибок при сохранении значения пользователя в сеансе во время входа в систему.Codeigniter throws 520 error CloudFlare при использовании сеанса

Здесь войти в функцию:

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 страницу ошибки.

Просьба сообщить Заранее благодарим за ваше время и поддержку.

+0

ли эта помощь http://eric.tendian.io/cloudflare-php-sessions – RiggsFolly

ответ

0

Ошибка 520, как правило, указывает на то, что есть большие файлы cookie или заголовки, которые возвращают ограничения на прокси-буфер на нашем конце. A HAR file отправьте в нашу службу поддержки, чтобы помочь нам выяснить, в чем проблема.

+0

Спасибо, Его решена теперь я сделал некоторые изменения в работе сессий. – RAk

+0

Спасибо за обновление :) – damoncloudflare

+1

@RAk вы можете предоставить некоторую информацию о том, что вы изменили, чтобы решить эту проблему? – mcryan

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); 
     } 
    } 
}