Как получить доступ к данным $ _ $ ESSION, хранящимся в воспламенителе кода массива - PullRequest
0 голосов
/ 20 мая 2018

Я следую учебнику на YouTube о CodeIgniter .Учебное пособие опирается только на переменную $username $_SESSION и не затрагивает другие аспекты $_SESSION s.В соответствии с документацией воспламенителя кода относительно $_SESSION вы можете просто вызвать сеанс super global с помощью ключа.Вот здесь и начинается моя проблема.

VAR_DUMP($_SESSION)

a var_dump из $ _Session предоставляет следующую информацию (я обрезал другие поля, чтобы она была короче)

 array (size=5)
      '__ci_last_regenerate' => int 1526800056
      '' => null
      'userID' => 
        array (size=1)
          0 => 
            array (size=14)
              'userID' => string '1' (length=1)
              'firstname' => string 'Tim' (length=3)
              'lastname' => string 'Coetzee' (length=7)
              'pword' => string 'xyz' (length=4)
              'email' => string 'someone@gmail.com' (length=17)

Что я хочу сделать

Я просто хочу иметь возможность назвать $_SESSION суперглобальный как таковой $_SESSION['email'] или $_SESSION['userID'].Я хочу получить доступ к VAR сессий ТОЧНО, так как вы должны делать это в соответствии с документами, поэтому я считаю, что моя проблема в контроллере () или в способе установки данных сеанса (), как можно увидеть ниже

Проблема

Допустим, я хочу отобразить userID сверху var_dump() информацию в виде, как тест, я делаю следующее ... echo $_SESSION['userID'];

Вышеприведенное приводит к ошибке

Сообщение: объект класса stdClass не может быть преобразован в строку

Хорошо, конечно, как бы это имя объекта я не называлчтобы сказать: firstname?

Я пробовал это в соответствии с официальными документами

echo $this->session->firstname И echo $this->user_data('userID');, которые приводят кбуду в той же ошибке.

Я понимаю, что данные $ _SESSION, похоже, сохраняются в многомерном массиве, поэтому я попробовал foreach() как таковой

foreach ($_SESSION as $sessions)
{
    foreach ($sessions as $value)
    {
        echo $value;
    }
}

, который выдает мне ошибку:

Сообщение: указан неверный аргумент для foreach ()

Однако после еще двух похожих ошибок на последней итерации он возвращает значения всех сеансов, поэтому я предполагаю, что я что-то делаю неправильнопетля.

Код следует ниже

Users_model.php

public function login($username, $password)
    {
        // Validate
        $this->db->where('username', $username);
        $this->db->where('pword', $password);
        $stmnt = $this->db->get('users');
        if($stmnt->num_rows() == 1){
            return $stmnt->row(1);
        } else {
            return false;
        }
    }

Controller.php

public function login(){
        $data['title'] = 'Sign In';
        $this->form_validation->set_rules('username', 'Username', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');
        if($this->form_validation->run() === FALSE){
            $this->load->view('templates/header');
            $this->load->view('users/login', $data);
            $this->load->view('templates/footer');
        } else {
            // Get username
            echo $username = $this->input->post('username');
            // Get and encrypt the password
            echo $password = $this->input->post('password');
            // Login user
            $user_id = $this->users_model->login($username, $password);
            if($user_id){
                // Create session
                $user_data = array(
                    'username' => $username,
                    'userID' => $user_id,
                    'logged_in' => true
                );
              $username = user_data ['username'];
              $userID = user_data ['userID'];
              $logged_in = user_data ['logged_in']; 

                $this->session->set_userdata($username );
                $this->session->set_userdata($userID );
                $this->session->set_userdata($logged_in);
                // Set message
                //$this->session->set_flashdata('user_loggedin', 'You are now logged in');
                redirect('pages/index');
            } else {
                // Set message
               // $this->session->set_flashdata('login_failed', 'Login is invalid');
                redirect('users/failed');
            }
        }
    }

$ config.php

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

Любая помощь или конструктивная критика приветствуются

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Когда вы echo $_SESSION['userID']; пытаетесь отобразить весь массив как строку, это невозможно.

Также вы не можете использовать два цикла foreach, потому что в первом цикле внешнего цикла есть целое число ('__ci_last_regenerate' => int 1526800056) в качестве аргумента внутреннего цикла, поэтому вы получите ошибку.

Следуя структуре массива сеанса, вы можете вызывать такие поля: echo $_SESSION['userID'][0]['firstname'];

или лучше:

$name = $this->session->userdata('firstname');

0 голосов
/ 20 мая 2018

Надеюсь, это поможет вам:

, если вы не хотите изменять сеанс набора модельных запросов следующим образом

$user = $this->users_model->login($username, $password);
if($user)
{
    $user_data = array(
                'username' => $username,
                'userID' => $user->id,
                'logged_in' => true
            );
    $this->session->set_userdata($user_data);

    //$this->session->set_flashdata('user_loggedin', 'You are now logged in');
    redirect('pages/index');
} 
else 
{
    // Set message
    // $this->session->set_flashdata('login_failed', 'Login is invalid');
    redirect('users/failed');
}

распечатайте индивидуальный ключ сеанса, как это:

echo $this->session->userdata('username');
echo $this->session->userdata('userID');
echo $this->session->userdata('logged_in');

и весь сеанс, как это:

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

Примечание: для Версия CI 3.1.8 , , например, такой :

$username = $this->session->username;
$userid = $this->session->userID;

для получения дополнительной информации https://www.codeigniter.com/user_guide/libraries/sessions.html#retrieving-session-data

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