我使用 CI 已经有一段时间了,最近升级到 CI 3。我注意到 Session 库现在已移动到一个文件夹中。我曾经在扩展默认 CI 库的 application/libraries 文件夹中有自己的 MY_Session.php 文件。
我还使用 autoload.php 文件来自动加载我的会话库。这不再有效,因为我无法加载请求的类:会话。
如果我删除 MY_Session.php 文件,则页面会加载,但我会丢失我的扩展功能。
有谁知道如何在 CI 3 中扩展会话库?
我使用 CI 已经有一段时间了,最近升级到 CI 3。我注意到 Session 库现在已移动到一个文件夹中。我曾经在扩展默认 CI 库的 application/libraries 文件夹中有自己的 MY_Session.php 文件。
我还使用 autoload.php 文件来自动加载我的会话库。这不再有效,因为我无法加载请求的类:会话。
如果我删除 MY_Session.php 文件,则页面会加载,但我会丢失我的扩展功能。
有谁知道如何在 CI 3 中扩展会话库?
由于 3.0 早就发布了,为了完整起见:如果你想扩展 Session 类,你需要将你的扩展类 MY_Session.php 添加到 application/libraries/Session 目录以模仿它的 system/libraries/Session/Session。 php对应。
在您拥有正确的目录结构后,您的 MY_Session.php 文件应该包含扩展系统库类的常用方法,正如@Starx 所指出的那样。
目前不可能做到这一点,但有一个挂起的拉取请求试图解决这个问题。
但是,您不应发布与尚未发布的软件相关的问题。任何处于开发阶段的东西都可能再次改变、过时等等,而你在这里的问题将自动变得与每个人都无关,包括你自己。您应该在存储库本身上发布/询问您的问题(当然还要搜索已经存在的问题)。
可以在 CodeIgniter 3中扩展 Session 类。诚然,这有点麻烦,但无论如何我只用它来修复 Session 类中长期存在的错误。这是 CI3 的示例MY_Session.php库:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once SYSDIR . '/libraries/Driver.php';
require_once SYSDIR . '/libraries/Session/Session.php';
/*
Change the following if you want to use a different driver.
*/
require_once SYSDIR . '/libraries/Session/drivers/Session_cookie.php';
class MY_Session extends CI_Session_cookie
{
function __construct()
{
parent::__construct();
}
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.php */
/* Location: ./application/libraries/MY_Session.php */
欲了解更多信息,或者如果它发生变化,请跟上:http: //degreesofzero.com/article/55
披露:这是我的个人博客。
我设法在 Codeigniter 3.1.3 中扩展了 CI_Session。这是我所做的:
创建文件 application/libraries/Session/MY_Session.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Session extends CI_Session {
public function __construct(array $params = array())
{
if ( $this->ignore_sessions() )
return;
parent::__construct();
}
function ignore_sessions()
{
$uri = str_replace ("//", "/", $_SERVER['REQUEST_URI']);
if ( strpos($uri, '/ignore_this_controller/') === 0 )
return true;
return false;
}
}
您可能还想在 config/autoload.php 中添加“会话”:
$autoload['libraries'] = array('session',....)
您可以像扩展其他核心组件一样执行此操作。
class MY_Session extends CI_Session {
function __construct()
{
parent::__construct();
echo "In extended the session";
}
}
确保您也加载了会话库。像
$autoload['libraries'] = array('database','session');
还有,Unable to load the requested class: Session
一般都是因为这两个原因触发的。
另外,请确保您的电脑上有一个加密密钥config.php
$config['encryption_key'] = 'xxxxxxxxxxxxxxxxxxxxxxx';
我希望不会迟到:
当您加载(或自动加载)会话库时,您现在必须将其加载为驱动程序而不是库。这意味着调用
$this->load->driver('session')
代替
$this->load->library('session')
和/或在
$autoload['drivers']
代替
$autoload['libraries']