[英]Extending the Session Library in Codeigniter 3
我一直在使用CI一段時間,最近升級到CI 3.我注意到會話庫現在已經移動到一個文件夾。 我曾經在application / libraries文件夾中擁有自己的MY_Session.php文件,該文件擴展了默認的CI庫。
我還使用autoload.php文件自動加載我的會話庫。 這不再有效,因為我無法加載請求的類:Session。
如果我刪除了MY_Session.php文件,那么頁面加載,但是我將丟失我的擴展功能。
有誰知道如何在CI 3中擴展會話庫?
為了完整起見,因為3.0早已發布:如果要擴展Session類,則需要將擴展類MY_Session.php添加到application / libraries / Session目錄以模仿其system / libraries / Session / Session。 php對應的。
擁有正確的目錄結構后,您的MY_Session.php文件應包含擴展系統庫類的常用方法,如@Starx所述。
目前不可能這樣做,但有一個掛起的拉取請求試圖解決問題。
但是,您不應發布與尚未發布的軟件相關的問題。 任何處於開發階段的東西都可能會再次發生變化,變得過時等等,而你的問題會自動變得與包括你自己在內的所有人無關。 您應該在存儲庫本身上發布/提出您的問題(當然,搜索已存在的問題)。
它可以在笨3.擴展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中添加“session”:
$ 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']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.