Как предотвратить автоматический выход из системы в codeigniter?

я использую codeigniter
с ion_auth настроен, а MySQL как бэкэнд,
мое приложение работает нормально, но иногда / не случайно, когда я звоню add/update функции это автоматически выйти из меня.
Я работаю над этим в течение последних 1 месяцев, но пока не нашел решения?
я также меняю настройки в ion_auth Конфигурационный файл

$config['user_expire']  = 0;

Любая идея, решение этой проблемы?
пожалуйста, прокомментируйте, чтобы я мог предоставить больше данных, если это необходимо.

Замечания: у меня также есть проверка этот но не повезло.

13

Решение

Вы, вероятно, выполняете запросы AJAX, это общая проблема …

Я бы посоветовал вам использовать сессионную базу данных и совершать ajax-вызовы, чтобы не обновлять сессию …

Сделай это на своем занятии

class MY_Session extends CI_Session {

public function sess_update()
{
$CI =& get_instance();

if ( ! $CI->input->is_ajax_request())
{
parent::sess_update();
}
}
}
8

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

Создайте библиотеку сессий с вашим собственным MY_Session.php библиотека, которая перезаписала sess_update метод с тем, который только выполнил метод обновления, когда не AJAX-запрос:

MY_Session.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

require_once BASEPATH . '/libraries/Session.php';

class MY_Session extends CI_Session
{

function __construct()
{
parent::__construct();

$this->CI->session = $this;
}

function sess_update()
{
// Do NOT update an existing session on AJAX calls.
if (!$this->CI->input->is_ajax_request())
return parent::sess_update();
}

}

Расположение файла:

/application/libraries/MY_Session.php * /

Вы можете автоматически загрузить эту библиотеку из config/autoload.php:

$autoload['libraries'] = array( 'MY_Session');

Или вы можете загрузить его позже:

$this->load->library('MY_Session');

Что это за sess_update (); делает?

В вашем system/libraries/Session.php Eсть function sess_update() это автоматически обновляет вашу последнюю активность. Эта функция обновляет сессию каждые пять минут по умолчанию.

public function sess_update()
{
// We only update the session every five minutes by default
if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now)
{
return;
}

// _set_cookie() will handle this for us if we aren't using database sessions
// by pushing all userdata to the cookie.
$cookie_data = NULL;

/* Changing the session ID during an AJAX call causes problems,
* so we'll only update our last_activity
*/
if ($this->CI->input->is_ajax_request())
{
$this->userdata['last_activity'] = $this->now;

// Update the session ID and last_activity field in the DB if needed
if ($this->sess_use_database === TRUE)
{
// set cookie explicitly to only have our session data
$cookie_data = array();
foreach (array('session_id','ip_address','user_agent','last_activity') as $val)
{
$cookie_data[$val] = $this->userdata[$val];
}

$this->CI->db->query($this->CI->db->update_string($this->sess_table_name,
array('last_activity' => $this->userdata['last_activity']),
array('session_id' => $this->userdata['session_id'])));
}

return $this->_set_cookie($cookie_data);
}

// Save the old session id so we know which record to
// update in the database if we need it
$old_sessid = $this->userdata['session_id'];
$new_sessid = '';
do
{
$new_sessid .= mt_rand(0, mt_getrandmax());
}
while (strlen($new_sessid) < 32);

// To make the session ID even more secure we'll combine it with the user's IP
$new_sessid .= $this->CI->input->ip_address();

// Turn it into a hash and update the session data array
$this->userdata['session_id'] = $new_sessid = md5(uniqid($new_sessid, TRUE));
$this->userdata['last_activity'] = $this->now;

// Update the session ID and last_activity field in the DB if needed
if ($this->sess_use_database === TRUE)
{
// set cookie explicitly to only have our session data
$cookie_data = array();
foreach (array('session_id','ip_address','user_agent','last_activity') as $val)
{
$cookie_data[$val] = $this->userdata[$val];
}

$this->CI->db->query($this->CI->db->update_string($this->sess_table_name, array('last_activity' => $this->now, 'session_id' => $new_sessid), array('session_id' => $old_sessid)));
}

// Write the cookie
$this->_set_cookie($cookie_data);
}
6

Замените строку 346 в system / library / Session.php (функция sess_update ())

if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now)

С:

if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now || $this->CI->input->is_ajax_request())

Надеюсь, что это работает для вас .

1

это лучший ответ.

codeignter controller
function fetchSendToProduction($sku,$old_fab_id)
{
if($this->input->is_ajax_request() > 0)
{
$result = $this->ifmodel->fetchSendToProduction($sku,$old_fab_id);
echo json_encode($result);
}
}
codeignter view ajax call
$.ajax({
type: "POST",
url: "<?php echo base_url(); ?>index.php/inputFactor/fetchSendToProduction/" + sku+'/'+old_fab_id ,
cache: false,
processData: false,
success: function(data)
{
}
});
-1
По вопросам рекламы [email protected]