Кажется, что UserDate сеанса CodeIgniter не существует - PullRequest
0 голосов
/ 29 января 2012

Я пишу свой первый проект CI и пытаюсь написать loginscript.Все работает почти нормально, за исключением того, что пользовательские данные сессии недоступны (даже если я не проверяю свои куки / сессии в 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');
    }

}
?>

1 Ответ

0 голосов
/ 29 января 2012

Оператор if вашей функции проверки должен иметь следующий вид:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...