Переменная сеанса в Codeigniter не работает

Привет, я создал сеанс в Codeigniter, я установил переменную сеанса в моей модели. Но после установки значения переменной сеанса, когда я вызываю переменную сеанса в своем представлении через контроллер, значение переменной сеанса становится равным нулю. Любая помощь???

Обновление

Это моя модель, где я устанавливаю свою переменную сеанса

function login ($username, $password)

    {
        $this->db->where('username' , $username);
        $this->db->where('password', $password);

        $query = $this->db->get('users');

        if ($query->num_rows()>0)

        {
            foreach ($query->result() as $rows)
            {
                $data = array(

                    'user_name' => $rows->username,
                    'logged_in' => TRUE,
                    'validated' => true
                );
            }

                $this->session->set_userdata($data);
                //$user = $rows->username;
                //$this->session->set_userdata('user_name', $user);

                return true;
        }

        else

        {
            return false;
        }

    }

Вот мой контроллер, откуда я перенаправляюсь в представление

public function verification()

    {
        $username = $this->input->post('username');
        $password = $this->input->post('password');


        $result = $this->site_model->login($username, $password);


        //$result = $this->session->set_userdata('validated');

        if ($result)
        {
            //$this->admin();
            //$this->session->set_userdata('login_state', TRUE);

            redirect ('site/index');

        }
        else
        {

            redirect ('site/login');
            //$this->load->view('login');
        }
    }

я назвал session_start(); в контроллере в construct();

и вот как я могу получить доступ к переменной сеанса в моем представлении

<?php if ($this->session->userdata('user_name') != "") { ?>

.....

Ответ 1

Прежде всего, в CI вам не нужно использовать session_start() в любом месте. только сеанс автозагрузки в файле config/autoload.php.

Удалите этот session_start(). Попробуйте использовать flashdata. Flashdata - это временная сессия, в основном используемая в вашем случае, когда нам нужно перенаправить пользователя на другую страницу и отобразить сообщение об ошибке или ошибке.

  • Установите flashdata: $ this- > session- > set_flashdata ('item', 'value');

  • получить flashdata: $ This- > session- > flashdata ( 'пункт');

Вот ссылка на документацию http://www.codeigniter.com/user_guide/libraries/sessions.html#flashdata

Ответ 2

используйте autoload applications/config/autoload.php, чтобы добавить сессионный liblary и удалить session_start();

$autoload['libraries'] = array('session');

Модель передает данные post vithout varibles, вы можете сделать так:

контроллер:

public function verification()
{
     $result = $this->site_model->login();

      if ($result){
          redirect ('site/index');
      } else {
          redirect ('site/login');
      }
}

Модель:

public function login()
{
    $this->db->where('username' , $this->input->post('username'));
    $this->db->where('password', $this->input->post('password'));

    $query = $this->db->get('users');

    if ($query->num_rows()>0)

    {
        $res = $query->row_array();

        $data = array(
            'user_name' => $res['username'],
            'logged_in' => TRUE,
            'validated' => true
        );


        $this->session->set_userdata($data);
        return true;
    } else {
        return false;
    }
 }

Ответ 3

установите переменную сеанса в контроллере.. это работает для меня приятно

модель

    function Login($email,$pass){
         $this->db->where('username' ,$email);
         $this->db->where('password',$pass);
         $query=$this->db->get('users');    
     if ($query->num_rows == 1) {           
    return true;     
     }      
     return FALSE;
    }

Контроллер:

        function varification(){
            $this->load->model('login_model');
    $email=$this->input->post('email');
    $pass=$this->input->post('pass');
    $success=$this->login_model->Login($email,$pass);
    if ($success) { 
                 $data = array(
                       'user_name' => $rows->username,
                       'logged_in' => TRUE,
                      'validated' => true
                 );
                $this->session->set_userdata($data);
                redirect ('site/index');
    } else{ // incorrect id or password
             redirect ('site/login');
            }
    }

теперь, если вы выполните echo <?php echo $this->session->userdata('user_name');?>, он покажет имя пользователя сеанса. вы можете повторить его где угодно даже в view.hope, это поможет вам

Ответ 4

Вам не нужно использовать основной php session_start(); Убедитесь, что вы загрузили библиотеку сеансов в autoload.php

как:

$autoload['libraries'] = array("session");

или вы можете загружать библиотеку сеансов вручную: как

$this->load->library('session');

Для полной документации Вы можете обратиться: Прочитать документацию

Ответ 5

используйте этот код для установки сеанса в codeigniter

$this->session->set_userdata('user_session', $user_session_data);

У меня была такая же проблема, и она была решена с использованием этого кода. Надеюсь, что это сработает и для вас!

Ответ 6

Установка переменных сеанса в модели, не является хорошей идеей для любой CMV-структуры (например, codeigniter). Отредактируйте свою модель login(), чтобы она возвращала хороший набор информации...

function login ($username, $password)
    {
        $this->db->where('username' , $username);
        $this->db->where('password', $password);

        $query = $this->db->get('users');
        if ($query->num_rows()>0)
        {
            foreach ($query->result() as $rows)
            {
                $data = array(
                    'user_name' => $rows->username,
                    'logged_in' => TRUE,
                    'validated' => true
                );
            }
            return $data;
        }
        else
        {
            return false;
        }
    }

... и обработать сеанс с контроллера.

public function verification()
    {
        $username = $this->input->post('username');
        $password = $this->input->post('password');

        $result = $this->site_model->login($username, $password);

        if ($result == false)
        {
            redirect ('site/login');
            //$this->load->view('login');
        }
        else
        {
            $this->session->set_userdata($result);
            redirect ('site/index');
        }
    }

Кроме того, чтобы иметь доступ к данным сеанса для файла вида, вам необходимо передать их через контроллер

$data['user_name'] = $this->session->userdata('user_name');

а затем вы можете сделать что угодно в своем файле вида:

<?php if ($user_name != "") { ?>

Ответ 7

Здравствуйте, я думаю, вам нужно изменить код модели Вы устанавливаете массив в сеансе и получаете доступ к непосредственному имени пользователя в сеансе

Я думаю, что ниже код будет работать для вас,

function login ($username, $password)
{

    $this->db->where('username' , $username);

    $this->db->where('password', $password);

    $query = $this->db->get('users')->row();

    if (count($query) > 0)

    {

            $this->session->set_userdata('user_name', $query->username);
            $this->session->set_userdata('logged_in', true);
            $this->session->set_userdata('validated', true);

            return true;
    }

    else

    {
        return false;
    }

}

Ответ 8

пожалуйста, следуйте инструкциям ниже.

убедитесь, что в файле autoload.php добавлена ​​команда sessiond session, поэтому сеанс будет автоматически загружен.

Когда вы используете сеанс в codigniter, вы не добавляете session_start() в начале файла, потому что система ядра codigniter будет обрабатывать это автоматически.

Рекомендуется установить переменные сеанса в контроллере вместо модели.

Надеюсь, это поможет вам в решении вашей проблемы.

спасибо.

Ответ 9

Вот мое решение, надеюсь, поможет..: D

в вашей модели.. я скопирую код вставки ниже, но немного поменяю..

function login ($username, $password)

    {
        $this->db->where('username' , $username);
        $this->db->where('password', $password);

        $query = $this->db->get('users');

        if ($query->result())//if any record
        {
            $rows = $query->row();

            $data = array(
                    'user_name' => $rows->username,
                    'logged_in' => TRUE,
                    'validated' => true
            );
            $this->session->set_userdata($data);
            return true;    
        }
        else
        {
            return false;
        }

    }

удалите session_start() в контроллере, а затем в вашем приложении /config/autoload.php

в этом $autoload ['libraries'] = array(); = > добавить сеанс как это $ autoload ['libraries'] = array ('session');

Благодарю..: D

Ответ 10

пользовательский php-сеанс пользователя, например session_start() и $_SESSION, он работает для меня. в php codeignatore