Учебники

11) Установить сессию в Codeigniter

CodeIgniter Session Management

Если вы разрабатывали настольные приложения до этого, вы, вероятно, знаете, что вы можете определить глобальную переменную, присвоить ей значение и использовать ее на протяжении всего жизненного цикла, когда приложение открывает и закрывает более одного (1), и каждый запрос будет иметь доступ к глобальная переменная.

Другими словами, состояние приложения сохраняется. То есть, если при входе в систему вы устанавливаете имя компании в глобальную переменную, то даже после закрытия формы входа в систему состояние компании сохраняется.

HTTP работает немного иначе, чем в описанном выше сценарии. Это без гражданства. То есть то, что вы делаете в одном запросе, не сохраняется в следующем запросе. T

o обойти эту проблему. У нас есть два (2) решения в PHP. Мы можем либо работать с файлами cookie, которые представляют собой небольшие файлы, размещенные на компьютере пользователя, либо работать с сеансами, которые похожи на файлы cookie, но вместо этого хранятся на сервере и имеют большую емкость, чем файлы cookie.

В этом уроке вы узнаете

Когда использовать сеансы?

Сессии обычно полезны, когда вы хотите узнать действия пользователя от страницы к странице. Например, допустим, у вас есть защищенная область на веб-сайте. Пользователям не нужно входить на каждой странице. Вы можете позволить пользователю войти в систему один раз и сохранить его данные в переменной сеанса, а затем повторно использовать те же данные для дальнейших запросов. Другие варианты использования включают работу с системой покупок, и пользователь должен добавлять товары в корзину.

В качестве альтернативы CodeIgniter также использует сеансы, чтобы сделать данные доступными только один раз при следующем запросе. Это полезно, если у вас есть возможность отредактировать и обновить запись в базе данных, и вы хотите вернуть некоторую обратную связь пользователю, когда он будет перенаправлен на другую страницу.

Отправка Flash-сообщений на другие страницы с помощью сеансов CI

В этом разделе вы узнаете об отправке флэш-сообщений на другие страницы с помощью библиотеки сеансов в CodeIgniter.

Создайте новый файл SessionController в

application/controllers/SessionController.php

Добавьте следующий код

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class SessionController extends CI_Controller {

    public function __construct() {
        parent:: __construct();

        $this->load->helper('url');
        $this->load->library('session');
    }

    public function index() {
        
        $this->load->view('sessions/index');
    }
    
    public function flash_message(){
        $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages');
        redirect(base_url('flash_index'));
    }
}

ВОТ,

  • класс SessionController extends CI_Controller {…} определяет класс SessionController и расширяет класс родительского контроллера.
  • public function __construct () {…} определяет метод конструктора, который инициализирует родительский класс, и загружает хелпер url и библиотеку сессий.
  • public function index () {…} определяет метод индекса сеанса, который загружает представление индекса сеанса.
  • public function flash_message () {…} определяет метод флеш-сообщения, который устанавливает флеш-данные, а затем перенаправляет на маршрут flash_index

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

Создать новый сеанс каталога в приложении / views

Создайте новый файл index.php в приложении / views / session

Добавьте следующий код

<html>
    <head>
        <title>Code Igniter Flash Session</title>
    </head>
    <body>
        <p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p>
    </body>
</html>

ВОТ,

  • <? = $ this-> session-> userdata (‘msg’);?> получает значение данных сеанса с ключом msg и отображает его в браузере.

Давайте теперь создадим маршруты для нашего метода flash сессии

Откройте приложение / config / rout.php

Добавьте следующие строки

$route['flash_index'] = 'session controller';
$route['flash_message'] = 'session controller/flash_message';

Давайте теперь запустим встроенный сервер для PHP и протестируем наши флеш-сообщения

Откройте терминал

Запустите следующую команду

cd C:\Sites\ci-app
php -S localhost:3000

ВОТ,

  • Приведенная выше команда просматривает каталог кода приложения и запускает встроенный сервер через порт 3000.

Примечание. Путь к приложению должен соответствовать пути, по которому вы загрузили CodeIgniter, и вы можете использовать любой свободный номер порта на вашем компьютере. Нет необходимости использовать порт 3000.

Загрузите следующий URL в ваш веб-браузер

HTTP: // локальный: 3000 / flash_message

Вы будете перенаправлены на следующий URL, и вы получите следующие результаты

HTTP: // локальный: 3000 / flash_index

Нажмите на кнопку обновления вашего веб-браузера или нажмите F5

Теперь вы получите следующие результаты

Хранение пользовательских данных в сеансах CI

Давайте теперь посмотрим на немного более сложный пример. Чтобы упростить процесс, мы будем симулировать аутентификацию пользователя, а не выполнять фактическую проверку записи пользователя в базе данных и введенного пароля.

Начнем с маршрутов

Откройте rout.php, расположенный в приложении / config

Добавьте следующие маршруты

$route['login'] = 'sessioncontroller/login';
$route['authenticate'] = 'sessioncontroller/authenticate';
$route['settings'] = 'sessioncontroller/settings';
$route['dashboard'] = 'sessioncontroller/dashboard';
$route['logout'] = 'sessioncontroller/logout';

ВОТ,

  • $ route [‘login’] = ‘sessioncontroller / login’; определяет маршрут, который отображает форму входа
  • $ route [‘authenticate’] = ‘sessioncontroller / authenticate’; определяет маршрут, который имитирует успешный вход пользователя в систему и устанавливает данные входа в сеанс.
  • $ route [‘settings’] = ‘sessioncontroller / settings’; определяет защищенную страницу, которая должна быть доступна только зарегистрированным пользователям
  • $ route [‘dashboard’] = ‘sessioncontroller / dashboard’; определяет защищенную страницу, которая должна быть доступна только зарегистрированным пользователям.
  • $ route [‘logout’] = ‘sessioncontroller / logout’; выходит из системы, удаляя данные сеанса

Давайте теперь обновим SessionController

Откройте приложение / controllers / SessionController.php

Добавьте следующие методы

public function check_auth($page) {
        if (!$this->session->userdata('logged_in')) {
            $this->session->set_flashdata('msg', "You need to be logged in to access the $page page.");
            redirect('login');
        }
    }

    public function login() {
        $this->load->view('sessions/login');
    }

    public function authenticate() {
        $this->session->set_userdata('username', 'John Doe');
        $this->session->set_userdata('logged_in', TRUE);
        redirect(base_url('dashboard'));
    }

    public function dashboard() {
        $this->check_auth('dashboard');
        $this->load->view('sessions/dashboard');
    }

    public function settings() {
        $this->check_auth('settings');
        $this->load->view('sessions/settings');
    }

    public function logout() {
        $this->session->unset_userdata('username');
        $this->session->unset_userdata('logged_in');
        redirect(base_url('login'));
    }

ВОТ,

  • public function check_auth ($ page) {…} определяет метод, который проверяет, вошел ли пользователь в систему, а затем разрешает доступ к странице. Если пользователь не вошел в систему, то он перенаправляется на страницу входа с помощью флеш-сообщения.
  • public function login () {…} загружает представление входа в систему, расположенное в каталоге сессий.
  • публичная функция authenticate () {…} устанавливает пользовательские данные сеанса для ключей logged_in и username. ПРИМЕЧАНИЕ. Мы не проверяем какие-либо данные для входа в базу данных. Мы просто предполагаем, что представленные данные в порядке и устанавливаем данные сеанса.
  • public function dashboard () {…} загружает страницу панели мониторинга после вызова $ this-> check_auth (‘dashboard’); который проверяет, что установлен ключ сеанса logged_in.
  • public function settings () {…} загружает страницу настроек, которая также защищена
  • public function logout () {…} уничтожает данные сеанса и выходит из системы пользователя. Метод также перенаправляет на страницу входа

CodeIgniter Session Views

Создайте следующие представления в приложении / представления / сеансы

  • dashboard.php
  • login.php
  • settings.php

Добавьте следующий код в dashboard.php

<!DOCTYPE html>
<html>
    <head>
        <title>Dashboard</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <nav class="navbar" role="navigation" aria-label="main navigation">
                    <div id="navbarBasicExample" class="navbar-menu">
                        <div class="navbar-start">
                            <a href="/<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a>
                            <a href="/<?= site_url('settings')?>" class="navbar-item">Settings</a>
                        </div>

                        <div class="navbar-end">
                            <div class="navbar-item has-dropdown is-hoverable">
                                <a class="navbar-link"><?=$this->session->userdata('username');?></a>

                                <div class="navbar-dropdown">
                                    <a class="navbar-item">My Profile</a>
                                    <hr class="navbar-divider">
                                    <a class="navbar-item">Sign out</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </nav>
                <h3>Welcome Page</h3>
            </div>
        </div>
    </body>
</html>

ВОТ,

  • <? = $ this-> session-> userdata (‘username’);?> отображает имя пользователя, которое мы установили в методе аутентификации

Добавьте следующий код в login.php

<!DOCTYPE html>
<html>
    <head>
        <title>Login</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <p><?=$this->session->userdata('msg');?></p>
                <form method="post" action="<?= site_url('authenticate')?>">
                    <div class="field">
                        <label class="label">Username</label>
                        <div class="control">
                            <input class="input" type="text" placeholder="Text input">
                        </div>
                    </div>
                    <div class="field">
                        <label class="label">Password</label>
                        <div class="control">
                            <input class="input" type="passport" placeholder="Text input">
                        </div>
                    </div>
                    <div class="field is-grouped">
                        <div class="control">
                            <button class="button is-success">Login</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </body>
</html>

ВОТ,

  • Форма входа отправляется для проверки подлинности маршрута.

Добавьте следующий код в settings.php

<!DOCTYPE html>
<html>
    <head>
        <title>Settings</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <nav class="navbar" role="navigation" aria-label="main navigation">
                    <div id="navbarBasicExample" class="navbar-menu">
                        <div class="navbar-start">
                            <a href="/<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a>
                            <a href="/<?= site_url('settings')?>" class="navbar-item">Settings</a>
                        </div>

                        <div class="navbar-end">
                            <div class="navbar-item has-dropdown is-hoverable">
                                <a class="navbar-link">Jim Jones</a>

                                <div class="navbar-dropdown">
                                    <a href="#" class="navbar-item">My Profile</a>
                                    <hr class="navbar-divider">
                                    <a href="/<?= site_url('logout')?>" class="navbar-item">Sign out</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </nav>
                <h3>Settings Page</h3>
            </div>
        </div>
    </body>
</html>

Вот и все для наших взглядов. Давайте теперь протестируем наше приложение.

В этом руководстве мы используем встроенный веб-сервер PHP, но вы можете использовать любой веб-сервер, поддерживающий PHP.

Откройте терминал

Запустите следующую команду

cd C:\Sites\ci-app
php -S localhost:3000

ВОТ,

  • Приведенная выше команда просматривает каталог кода приложения и запускает встроенный сервер через порт 3000.

Примечание. Путь к приложению должен соответствовать пути, по которому вы загрузили CodeIgniter, и вы можете использовать любой свободный номер порта на вашем компьютере. Нет необходимости использовать порт 3000.

Откройте следующий URL в вашем веб-браузере

HTTP: // локальный: 3000 / панель

вы будете перенаправлены на следующую страницу

Нажмите на кнопку входа

Вы увидите следующие результаты

После того, как мы вошли в систему, мы теперь можем видеть данные сеанса.

Резюме

В этом руководстве вы изучили основы библиотеки сеансов CodeIgniter и узнали, как использовать ее для хранения временных данных в виде флэш-сообщений и как использовать для хранения более постоянных данных, то есть данных для входа пользователя.