0

根据本论坛帖子( http://codeigniter.com/forums/viewthread/138823/ ),我扩展了 CI_Session 类以处理 Ajax 调用的 set_flashdata() 问题,但由于某种原因,我的 sess_update() 函数永远不会被调用。我在我的扩展构造函数中放入了一个 log_message() 调用,它确实被调用了。

为什么当我执行 $this->session->sess_update() 时没有调用我的 sess_update() 函数?

会话库已添加到 autoload.php 配置文件中,我的扩展库位于 /application/libraries 中。

class MY_Session extends CI_Session 
{

  public function MY_Session()
  {
    log_message('debug', 'MY_Session construct');
    parent::__construct();
  }

/**
* Update an existing session
*
* @access    public
* @return    void
*/
    function sess_update()
    {
       // skip the session update if this is an AJAX call!
       if ( !IS_AJAX )
       {
           log_message('debug', 'NOT an AJAX request');
           parent::sess_update();
       } else {
           log_message('debug', 'AJAX request');
       }
    } 

}

我还将它添加到我的 constants.php 文件中

// Define Ajax Request
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
4

3 回答 3

1

我假设它是版本 3。如果是这样,请将 MY_Session.php 放入

libraries/Session/MY_Session.php

User_Guide 对大多数问题都有帮助。

于 2015-10-12T05:50:12.670 回答
0

将您的课程添加到application/core并查看它是否有效

于 2012-09-18T14:40:55.020 回答
0

首先,如果你想扩展任何模型/控制器/加载器基类等,你应该使用'MY_'to来定位你的类。application/core

其次,这可以给出一个想法:

my_session.php

include_once(BASEPATH.'libraries/Session.php');

class MY_Session extends CI_Session{
      public function __construct(){
          parent::__construct(); 
          ....
      }
    ....
}

在您的控制器中:

$this->load->library('MY_Session');
$this->my_session->set_userdata() // or sth
于 2012-09-19T07:37:45.610 回答