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

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

 $config['user_expire'] = 0; 

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

Примечание: я также проверю это, но не повезло.

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

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

Сделайте это на своем классе сеанса

 class MY_Session extends CI_Session { public function sess_update() { $CI =& get_instance(); if ( ! $CI->input->is_ajax_request()) { parent::sess_update(); } } } 

Создайте сессионную библиотеку со своей собственной библиотекой 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 есть function sess_update() которая автоматически обновляет вашу последнюю активность. 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); } 

Заменить строку 346 в системе / 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()) 

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

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

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