3

データベースを使用したセッションで codeigniter の機能をテストしてきましたが、ログアウトするたびに (sess_destroy() を使用)、次の通知が表示されます。

            A PHP Error was encountered

            Severity: Notice

            Message: Undefined index: session_id

            Filename: libraries/Session.php

            Line Number: 272
            A PHP Error was encountered

            Severity: Notice

            Message: Undefined index: ip_address

            Filename: libraries/Session.php

            Line Number: 272
            A PHP Error was encountered

            Severity: Notice

            Message: Undefined index: user_agent

            Filename: libraries/Session.php

            Line Number: 272
            A PHP Error was encountered

            Severity: Notice

            Message: Undefined index: last_activity

            Filename: libraries/Session.php

            Line Number: 272
            A PHP Error was encountered

            Severity: Notice

            Message: Undefined index: session_id

            Filename: libraries/Session.php

            Line Number: 288
            A PHP Error was encountered

            Severity: Notice

            Message: Undefined index: last_activity

            Filename: libraries/Session.php

            Line Number: 289

それを修正するために何をする必要がありますか? (エラー報告などをオフにできることは知っていますが、なぜこれが起こるのか、そしてそれを修正する方法にもっと興味があります)。

これを使用してテーブルを作成しました:

                CREATE TABLE IF NOT EXISTS  `ci_sessions` (
                        session_id varchar(40) DEFAULT '0' NOT NULL,
                        ip_address varchar(45) DEFAULT '0' NOT NULL,
                        user_agent varchar(120) NOT NULL,
                        last_activity int(10) unsigned DEFAULT 0 NOT NULL,
                        user_data text NOT NULL,
                        PRIMARY KEY (session_id),
                        KEY `last_activity_idx` (`last_activity`)
                );

セッション ライブラリは自動ロードされます。

4

5 に答える 5

3

ベンの答えに簡単なメモを追加するだけです。彼は問題を正しく特定しましたが、操作の順序のために、Tank_auth ライブラリに create session 行を追加する方がより効果的であることがわかりました。

以下は、Tank_auth.php ライブラリの修正された logout() 関数です。

    /**
 * Logout user from the site
 *
 * @return  void
 */
function logout()
{
    $this->delete_autologin();

    // See http://codeigniter.com/forums/viewreply/662369/ as the reason for the next line
    $this->ci->session->set_userdata(array('user_id' => '', 'username' => '', 'status' => ''));

    $this->ci->session->sess_destroy();
    $this->ci->session->sess_create();
}
于 2014-04-16T21:53:04.070 に答える
0

Zach の場合: Tank 認証を使用しているため、ログアウト機能が次のようになっていることを確認してください:-

    function logout(){
        if ($this->tank_auth->is_logged_in()) {
            $this->tank_auth->logout();

            redirect('');           

        } 
    }

最も一般的に使用されるヘルパーとライブラリを自動ロードすることもできます:

$autoload['libraries'] = array('database','session','form_validation','pagination');
$autoload['helper'] = array('form','url','html');

2 回ログアウトしようとしている可能性があります。それでも問題が解決しない場合は、ログアウト コードを表示してください。

于 2012-12-12T14:30:24.903 に答える
0

application/config/config.phpファイルをチェックして、 $config[‘sess_use_database’] = TRUE.

于 2012-12-07T10:22:20.937 に答える
0

リフレッシュはあなたが欠けているものだと思います。redirect('logout', 'refresh'); を試しましたか?

于 2012-12-12T09:48:16.473 に答える