Дата пользователя сеанса CodeIgniter, похоже, не существует

Я кодирую свой первый проект CI и пытаюсь написать сценарий входа. Все работает почти нормально, за исключением того, что пользовательские данные сеанса недоступны (даже если я проверяю свои файлы cookie / сеансы в Firefox).

Я не понимаю, почему пользовательские данные сеанса доступны только после входа в систему, но если я снова загружу ту же страницу (не обновление, а новую загрузку), я ожидаю, что я все еще войду в систему, но я вышел? Даже если я попытаюсь прочитать пользовательские данные сеанса, их не существует.

Я упростил свой скрипт до примерной версии для stackoverflow. Кто может подсказать, как можно решить эту проблему с сессией?

С уважением, Гвидо

<?php
class Test extends CI_Controller
{   

    function index()
    {
        $logged_in = $this->is_logged_in();
        if($logged_in) { 
            echo "You are logged in. <a href='test/logout'>Logout</a> | <a href='../'>Return to index</a>"; 
        }
        else { 
            echo "You are logged out";
            echo form_open('test/check_login');
            echo "Email: ".form_input('email', set_value('email'));
            echo "Password: ".form_password('password', set_value('password'));
            echo form_submit('submit','Login');
            echo form_close();
        }
    }

    function is_logged_in() // check if user has logged in
    {
        // AUTOLOAD SESSIONS HAS SET in autoload.php-config >> $autoload['libraries'] = arra y('database', 'session', 'email');
        $is_logged_in = $this->session->userdata('is_logged_in');       
        if($is_logged_in) { 
            return TRUE; 
        }
        else { 
            return FALSE; 
        }
    }

    function check_login()
    {
        $client_id = $this->validate();
        if(is_numeric($client_id)) // if the user's credentials validated then user exists
        {
            $data = array(
                'client_id' => $client_id,
                'is_logged_in' => true
            );
            $this->session->set_userdata($data);
        }       
        $this->index();
    }

    // normally we put this function in a model, but for this example we put it here.
    function validate() // check if user exists in database
    {
        $this->db->where('email', $this->input->post('email'));
        $this->db->where('password', md5($this->input->post('password')));
        $query = $this->db->get('client_users'); // this is our user table

        if($query->num_rows == 1) // user exists
        {
            $row = $query->row();
            return $row->id_client;
        }
        else
        {
            return false;
        }
    }

    function logout()
    {
        $this->session->sess_destroy(); // kill session, so user will be logged out.
        redirect('/test');
    }

}
?>

person Guido Lemmens 2    schedule 29.01.2012    source источник


Ответы (1)


Ваш оператор проверки функции if должен читать:

if($query->num_rows() == 1) // user exists

Вы пропустили () после num_rows.

Изменить: после дальнейшего рассмотрения это не должно иметь значения. Единственное, что я могу сказать, это то, что, возможно, ваш результат не равен 1. Либо пользователь не найден, либо вы получаете более одного результата, оба из которых приводят к !== 1.

person MrDMAdev    schedule 29.01.2012
comment
Ну, кажется, что-то не так с использованием «сеанса» на моем локальном хосте... но я не знаю, с чего начинается проблема. - person Guido Lemmens 2; 31.01.2012
comment
Я решил проблему ... Это «локальный хост». Поскольку я тестировал на локальном хосте, кажется, что настройка домена для CI должна быть пустой. (См. codeigniter.com/forums/viewthread/209191) - person Guido Lemmens 2; 01.02.2012