2

CodeIgniter Session() クラスに問題がありますが、ユーザーがログアウトするとエラーが発生します。問題は、彼のアバターと情報が表示されるページのヘッダーにユーザー HTML ブロックがあることです。問題は、Logout Controller でこれを行うときです。

if ($this->session->userdata('is_logged_in') == 1) {
    $data['logged_in'] = TRUE;

    $this->session->sess_destroy();
}

$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");

..そして、HTML ビューで次のように尋ねます。

<?php
    if ($this->session->userdata('is_logged_in') == 1) {
        // Output HTML
    }
?>

..しかし、欠落しているすべてのセッション変数に対してエラーが生成されます。

私の質問です。「is_logged_in」がチェックされたときにまだ存在しているのに、残りのデータがなくなっているのはなぜですか。

4

1 に答える 1

2

を呼び出すと$this->session->sess_destroy()、ユーザーデータが設定解除されないのは、CI 2.1.0 のバグです。

問題を修正するプルリクエストは、https ://github.com/EllisLab/CodeIgniter/pull/1323 にあります。

修正は非常に簡単です。ファイルを変更する必要がありますsystem\libraries\Session.php。関数の最後に次の行を追加する必要がありますsess_destroy()

// Kill session data
$this->userdata = array();

したがって、sess_destroy()次のようになります。

/**
 * Destroy the current session
 *
 * @return  void
 */
public function sess_destroy()
{
    // Kill the session DB row
    if ($this->sess_use_database === TRUE && isset($this->userdata['session_id']))
    {
        $this->CI->db->where('session_id', $this->userdata['session_id']);
        $this->CI->db->delete($this->sess_table_name);
    }

    // Kill the cookie
    setcookie(
            $this->sess_cookie_name,
            addslashes(serialize(array())),
            ($this->now - 31500000),
            $this->cookie_path,
            $this->cookie_domain,
            0
        );

    // Kill session data
    $this->userdata = array();
}
于 2012-07-15T19:15:59.987 に答える