Как установить сеанс в Codeigniter на примере

Управление сеансами CodeIgniter

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

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

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

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

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

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

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

Отправка флэш-сообщений на другие страницы с помощью сеансов 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 расширяет CI_Controller {…} определяет класс SessionController и расширяет класс родительского контроллера.
  • public function __construct() {…} определяет метод конструктора, который инициализирует родительский класс и загружает вспомогательный URL-адрес и библиотеку сеансов.
  • public function index() {…} определяет метод индекса сеанса, который загружает представление индекса сеанса.
  • общедоступная функция flash_message(){…} определяет метод флэш-сообщения, который устанавливает флэш-данные, а затем перенаправляет их на маршрут flash_index

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

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

Создайте новый файл index.php в application/views/sessions.

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

<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>

ВОТ,

session->userdata('msg');?> извлекает значение данных сеанса с ключом msg и отображает его в браузере.

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

Откройте приложение/config/routes.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://localhost:3000/flash_message

Вы будете перенаправлены на следующий URL-адрес и получите следующие результаты: http://localhost:3000/flash_index

Отправка флэш-сообщений на другие страницы

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

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

Отправка флэш-сообщений на другие страницы

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

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

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

Откройте Routes.php, расположенный в файле application/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'] = 'контроллер сеанса/настройки'; определяет защищенную страницу, которая должна быть доступна только вошедшим в систему пользователям
  • $route['dashboard'] = 'sessioncontroller/dashboard'; определяет защищенную страницу, которая должна быть доступна только вошедшим в систему пользователям.
  • $route['logout'] = 'контроллер сеанса/выход'; выводит пользователя из системы, уничтожая данные сеанса

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

Откройте приложение/контроллеры/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() {…} загружает представление входа в систему, расположенное в каталоге сеансов.
  • публичная функция аутентификации() {…} устанавливает данные пользователя сеанса для ключей logged_in и имени пользователя. ПРИМЕЧАНИЕ. Мы не проверяем данные для входа в базу данных. Мы просто предполагаем, что предоставленные данные в порядке, и устанавливаем данные сеанса.
  • public function Dashboard() {…} загружает страницу информационной панели после вызова $this->check_auth('dashboard'); который проверяет, что ключ сеанса logged_in установлен.
  • public function settings() {…} загружает страницу настроек, которая также защищена
  • public function logout() {…} уничтожает данные сеанса и завершает сеанс пользователя. Метод также перенаправляет на страницу входа.

Представления сеанса CodeIgniter

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

  • панель инструментов.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>

ВОТ,

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://localhost:3000/dashboard

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

Представления сеанса CodeIgniter

Нажмите на кнопку Войти

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

Представления сеанса CodeIgniter

После входа в систему мы теперь можем видеть данные сеанса.

Резюме

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