Codeigniter выдает ошибку 520 CloudFlare при использовании сеанса

Я использую Codeigniter с cloudflare и получаю ошибку 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.

пожалуйста, порекомендуйте
Заранее спасибо за ваше время и поддержку.

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

Другие решения

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector