AJAX calls kill sesion - dansanti - 12-15-2014
Hi,
i have 2 sites with codeigniter , and in one of these, have a lot ajax call (like a ajax chat), in this case i have to use a "patch" with :
PHP Code: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once SYSDIR . '/libraries/Driver.php'; require_once SYSDIR . '/libraries/Session/Session.php'; require_once SYSDIR . '/libraries/Session/drivers/Session_cookie.php';
class MY_Session_cookie extends CI_Session_cookie {
public function __construct() { parent::__construct(); log_message('info', 'MY_Session_cookie loaded'); }
protected function _sess_update($force = false) {
// Do NOT update an existing session on AJAX calls. if ($force || !$this->CI->input->is_ajax_request()) return parent::_sess_update($force); }
}
/* End of file MY_Session_cookie.php */ /* Location: ./system/libraries/Session/drivers/MY_Session_cookie.php */
This solve constantly logouts for a while, but some times take logouts again, and speciallly when a ajax call was perform when i change current tab, and click in another with no site content(in that case logout is inmediatly when performe a ajax).
i Notice that cookie is correctly send it to validate, but the answer come with another cookie (becouse session expires i supost).. any idea?
RE: AJAX calls kill sesion - albertleao - 12-15-2014
This was one of the bugs that never got fixed in the Codeigniter 2.x branch. I'm pretty confident it was fixed in the 3.x branch which is still under development. You can download the latest version on github though.
RE: AJAX calls kill sesion - dansanti - 12-15-2014
(12-15-2014, 01:58 PM)albertleao Wrote: This was one of the bugs that never got fixed in the Codeigniter 2.x branch. I'm pretty confident it was fixed in the 3.x branch which is still under development. You can download the latest version on github though.
i was test it on 2.2 and now i'm using the latest version 3.x, hopping fix that bug.
RE: AJAX calls kill sesion - InsiteFX - 12-15-2014
This has always worked for me give it a try.
Code: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* ------------------------------------------------------------------------
* Created by PhpStorm 8.0.3.
* Date : 5/6/2012
* Time : 11:19:06 PM
* ------------------------------------------------------------------------
*
* Class MY_Session
*
* @package Package CodeIgniter
* @subpackage Subpackage session
* @category category sessions
* @author Raymond L King Sr.
* @link http://example.com
* ------------------------------------------------------------------------
* To change this template use File | Settings | File Templates.
* ------------------------------------------------------------------------
*/
/**
* ------------------------------------------------------------------------
* CI Session Class Extension for AJAX calls.
* ------------------------------------------------------------------------
*
* ====- Save as application/libraries/MY_Session.php -====
*/
class MY_Session extends CI_Session {
// --------------------------------------------------------------------
/**
* sess_update()
*
* Do not update an existing session on ajax or xajax calls
*
* @access public
* @return void
*/
public function sess_update()
{
$_ci =& get_instance();
$ajax = $_ci->input->is_ajax_request();
if ($ajax === FALSE)
{
parent::sess_update();
}
}
// --------------------------------------------------------------------
/**
* sess_destroy()
*
* Clear's out the user_data array on sess::destroy.
*
* @access public
* @return void
*/
public function sess_destroy()
{
$this->userdata = array();
parent::sess_destroy();
}
} // End of Class.
/**
* ------------------------------------------------------------------------
* Filename: MY_Session.php
* Location: ./application/libraries/MY_Session.php
* ------------------------------------------------------------------------
*/
RE: AJAX calls kill sesion - dansanti - 12-15-2014
(12-15-2014, 02:47 PM)InsiteFX Wrote: This has always worked for me give it a try.
Code: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* ------------------------------------------------------------------------
* Created by PhpStorm 8.0.3.
* Date : 5/6/2012
* Time : 11:19:06 PM
* ------------------------------------------------------------------------
*
* Class MY_Session
*
* @package Package CodeIgniter
* @subpackage Subpackage session
* @category category sessions
* @author Raymond L King Sr.
* @link http://example.com
* ------------------------------------------------------------------------
* To change this template use File | Settings | File Templates.
* ------------------------------------------------------------------------
*/
/**
* ------------------------------------------------------------------------
* CI Session Class Extension for AJAX calls.
* ------------------------------------------------------------------------
*
* ====- Save as application/libraries/MY_Session.php -====
*/
class MY_Session extends CI_Session {
// --------------------------------------------------------------------
/**
* sess_update()
*
* Do not update an existing session on ajax or xajax calls
*
* @access public
* @return void
*/
public function sess_update()
{
$_ci =& get_instance();
$ajax = $_ci->input->is_ajax_request();
if ($ajax === FALSE)
{
parent::sess_update();
}
}
// --------------------------------------------------------------------
/**
* sess_destroy()
*
* Clear's out the user_data array on sess::destroy.
*
* @access public
* @return void
*/
public function sess_destroy()
{
$this->userdata = array();
parent::sess_destroy();
}
} // End of Class.
/**
* ------------------------------------------------------------------------
* Filename: MY_Session.php
* Location: ./application/libraries/MY_Session.php
* ------------------------------------------------------------------------
*/
Must be loaded or autoloaded?, and well now i'm using CI3 do you know if work on it?,(by the way i'll test it on CI3 and give a comment)
RE: AJAX calls kill sesion - InsiteFX - 12-16-2014
Not sure if it will work on CI 3.0, I do not use it until it is released.
But it does work for me under CI 2.2.0
RE: AJAX calls kill sesion - drhouse7x - 12-16-2014
(12-16-2014, 05:15 AM)InsiteFX Wrote: Not sure if it will work on CI 3.0, I do not use it until it is released.
But it does work for me under CI 2.2.0
Hi,
Must be loaded or autoloaded?
RE: AJAX calls kill sesion - dansanti - 12-16-2014
well making this file seems to work on CI3, but not fix logout on tabs change (firefox BTW), and this file don't need to be autoloaded, placing this on correct directory, autoload the file.
PHP Code: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once SYSDIR . '/libraries/Driver.php'; require_once SYSDIR . '/libraries/Session/Session.php'; require_once SYSDIR . '/libraries/Session/drivers/Session_cookie.php';
class MY_Session_cookie extends CI_Session_cookie {
public function __construct() { parent::__construct(); log_message('info', 'MY_Session_cookie loaded'); }
protected function _sess_update($force = false) {
// Do NOT update an existing session on AJAX calls. if ($force || !$this->CI->input->is_ajax_request()) return parent::_sess_update($force); } // --------------------------------------------------------------------
/** * sess_destroy() * * Clear's out the user_data array on sess::destroy. * * @access public * @return void */ public function sess_destroy() { $this->userdata = array();
parent::sess_destroy(); }
}
/* End of file MY_Session_cookie.php */ /* Location: ./system/libraries/Session/drivers/MY_Session_cookie.php */
RE: AJAX calls kill sesion - Narf - 12-16-2014
https://github.com/bcit-ci/CodeIgniter/issues/3097#issuecomment-67228008
Please don't concurrently post here and on GitHub ... If you're looking to solve a problem that you're having, post here and only post on GitHub if you're sure that it's a bug that hasn't already been fixed.
RE: AJAX calls kill sesion - rexcheung727 - 11-08-2020
(12-16-2014, 01:28 PM)Hi, I am new in CI3. My site has ajax called for every 5 sec. It is adopted in an intranet site and only less than 10 active users. To solve this auto logout issue, i just need to put this "MY_Session_cookie.php" under ./system/libraries/Session/drivers/MY_Session_cookie.php, then restart the XMAPP, it will work? dansanti Wrote: well making this file seems to work on CI3, but not fix logout on tabs change (firefox BTW), and this file don't need to be autoloaded, placing this on correct directory, autoload the file.
PHP Code: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once SYSDIR . '/libraries/Driver.php'; require_once SYSDIR . '/libraries/Session/Session.php'; require_once SYSDIR . '/libraries/Session/drivers/Session_cookie.php';
class MY_Session_cookie extends CI_Session_cookie {
public function __construct() { parent::__construct(); log_message('info', 'MY_Session_cookie loaded'); }
protected function _sess_update($force = false) {
// Do NOT update an existing session on AJAX calls. if ($force || !$this->CI->input->is_ajax_request()) return parent::_sess_update($force); } // --------------------------------------------------------------------
/** * sess_destroy() * * Clear's out the user_data array on sess::destroy. * * @access public * @return void */ public function sess_destroy() { $this->userdata = array();
parent::sess_destroy(); }
}
/* End of file MY_Session_cookie.php */ /* Location: ./system/libraries/Session/drivers/MY_Session_cookie.php */
|