簡體   English   中英

在Codeigniter 3中擴展會話庫

[英]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通常由於兩個原因而被觸發。

  • CI無法完成會話
  • 您尚未自動加載庫

另外,請確保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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM