5

しばらく CI を使用していて、最近 CI 3 にアップグレードしました。セッション ライブラリがフォルダーに移動されていることに気付きました。以前は、デフォルトの CI ライブラリを拡張する独自の MY_Session.php ファイルが application/libraries フォルダーにありました。

また、autoload.php ファイルを使用して、セッション ライブラリを自動ロードします。Unable to load the requested class: Session. が表示されるため、これは機能しなくなりました。

MY_Session.php ファイルを削除すると、ページが読み込まれますが、拡張機能が失われます。

CI 3 でセッション ライブラリを拡張する方法を正確に知っている人はいますか?

4

6 に答える 6

5

現在それを行うことは不可能ですが、問題を解決しようとする保留中のプル リクエストがあります。

ただし、まだリリースされていないソフトウェアに関する質問は投稿しないでください。開発段階にあるものはすべて、再び変更されたり、時代遅れになったりする可能性があり、ここでのあなたの質問は、あなた自身を含むすべての人にとって自動的に無関係になります. リポジトリ自体に質問を投稿/質問する必要があります(もちろん、既存の問題を検索してください)。

于 2012-11-14T20:36:13.027 に答える
2

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

開示:これは私の個人的なブログです。

于 2013-02-19T19:01:58.623 に答える
2

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',....)

于 2017-02-20T20:25:23.640 に答える
0

これは、他のコア コンポーネントの拡張と同様に行うことができます。

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一般的に 2 つの理由でトリガーされます。

  • CI がセッションに罰金を科せません
  • ライブラリをオートロードしていません

また、暗号化キーがあることを確認してください。config.php

$config['encryption_key'] = 'xxxxxxxxxxxxxxxxxxxxxxx';
于 2012-11-09T00:28:58.590 に答える
-1

遅くないことを願っています:

セッション ライブラリをロード (または自動ロード) する場合、ライブラリではなくドライバとしてロードする必要があります。これは、呼び出すことを意味します

$this->load->driver('session') 

それ以外の

$this->load->library('session')

および/または「セッション」のリスト

$autoload['drivers']

それ以外の

$autoload['libraries']

于 2013-11-25T21:56:39.277 に答える