Codeigniter 3 и сессия

1

У меня были сеансы, работающие нормально в версии 2.x CI. Я использовал их для сохранения, используя параметр сеанса CI по умолчанию (браузер, я считаю), но я решил использовать базу данных сейчас. Я установил таблицу и все остальное в файле конфигурации. Проблема в том, что я никогда не получаю никаких ошибок. Библиотека сеанса и шифрования находится в файле конфигурации автозагрузки. В моей модели я использую следующий код для ввода данных в сеанс:

$this->session->set_userdata(array(
  'email' => $email,
  'is_logged_in' => 1)
); 

Но когда я пытаюсь использовать:

var_dump($this->session->userdata());

Я получаю следующий результат:

array(1) { ["__ci_last_regenerate"]=> int(1448664996) }

на сеанс ничего не добавляется, ошибок не появляется. Может ли кто-нибудь помочь?

РЕДАКТИРОВАТЬ:

config.php

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'mydomain';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

autoload.php

$autoload['libraries'] = array('database', 'email', 'encryption', 'session');

Я следил за всеми инструкциями, показывая документацию.

EDIT 2:

контроллер:

public function login_into_site()
    {
        if($this->input->post('viaAjax') == 1)
        {
            $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|callback_validate_credentials');
            $this->form_validation->set_rules('password', 'Password', 'required|md5|trim');
            $user_url = base64_decode($this->input->post('rand'));

            if ($this->form_validation->run())
            {
                $sulo = array();
                $sulo['res'] = '1';
                $sulo['address'] = $user_url;
                echo json_encode($sulo);
            }
            else
            {
                $formError = array();
                $formError['email'] = form_error('email');
                $formError['password'] = form_error('password');
                echo json_encode($formError);
            }
        }
        else
        {
            echo json_encode("fail");
        }
    }

    public function validate_credentials()
    {
        $this->load->model('user/model_user_auth');
        $this->model_user_auth->can_log_in($message);
        if($message == 1)
        {
            return true;
        }
        else if($message == 2)
        {
            $this->form_validation->set_message('validate_credentials','not activated');
            return false;
        }
        else
        {
            $this->form_validation->set_message('validate_credentials','bad username or password');
            return false;
        }
    }

модель:

public function can_log_in(&$message)
    {
        $email = $this->input->post('email');
        $this->db->where('email',$email);
        $this->db->where('password',md5($this->input->post('password')));
        $query = $this->db->get('users');
        $message = '';
        if($query->num_rows() == 1)
        {
            $this->session->set_userdata(array(
                'email' => $email,
                'is_logged_in' => 1)
            );

            foreach ($query->result() as $row)
            {
                $activated = $row->activate;
                $membership = $row->membership;
            }
            if($activated == NULL && $membership == 'a')
            {
                $message = 1; //success
            }
            else if($activated != NULL && $membership == 'a')
            {
                $message = 2; //not activated
            }
            else
            {
                $message = 3; // user exist but info wrong
            }
        }
        else
        {
            $message = 0; // user does not exist
        }
    }

Модель генерирует $message = 1; потому что я получаю return как "TRUE" в функции обратного вызова контроллера и функции контроллера, которая регистрирует пользователя в процессе без каких-либо ошибок

  • 0
    Таблица, которую вы создаете, это для CI2 или CI3?
  • 0
    @Tpojka для CI3. Я получил это от codeigniter.com/user_guide/libraries/sessions.html
Показать ещё 13 комментариев
Теги:
codeigniter
session
codeigniter-3

1 ответ

2
Лучший ответ

Решаемые. Проблема заключалась в том, что мой файл cookie был отмененным сеансом базы данных. В файле конфигурации, если вы используете базу данных для сеанса, эта строка не может иметь значение "

$config['sess_cookie_name'] = 'mydomain';

Чтобы сеанс работал с базой данных, это значение должно быть пустым:

$config['sess_cookie_name'] = '';

Если он не пуст, CI по умолчанию будет использовать файлы cookie для вашего сеанса. Это не означает, что вы не можете использовать файлы cookie. Вам просто нужно загрузить их через помощника, и они будут работать нормально.

  • 0
    Не могли бы вы указать свой источник этой информации? Я использую сеансы redis и сохраняю идентификатор сеанса в файле cookie с именем, все работает просто замечательно. Хотелось бы узнать больше о вашей точке зрения, упомянутой выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню