So legen Sie anhand eines Beispiels eine Sitzung in Codeigniter fest

CodeIgniter-Sitzungsverwaltung

Wenn Sie zuvor Desktop-Anwendungen entwickelt haben, wissen Sie wahrscheinlich, dass Sie eine globale Variable definieren, ihr einen Wert zuweisen und sie während des gesamten Lebenszyklus der Anwendung beim Öffnen und Schließen von mehr als einer (1) verwenden können, auf die jede Anfrage Zugriff hat die globale Variable.

Mit anderen Worten: Der Status der Anwendung bleibt erhalten. Das heißt, wenn Sie bei der Anmeldung den Firmennamen auf eine globale Variable gesetzt haben, bleibt dieser Status des Firmennamens auch nach dem Schließen des Anmeldeformulars erhalten.

HTTP funktioniert etwas anders als das oben beschriebene Szenario. Es ist staatenlos. Das bedeutet, dass das, was Sie in einer Anfrage tun, bei der nächsten Anfrage nicht durchgehalten wird. T

o Umgehen Sie dieses Problem. Wir haben zwei (2) Lösungen in PHP. Wir können entweder mit Cookies arbeiten, bei denen es sich um kleine Dateien handelt, die auf dem Computer des Benutzers abgelegt werden, oder mit Sitzungen, die Cookies ähneln, aber stattdessen auf dem Server gespeichert werden und eine größere Kapazität als Cookies haben.

Wann sollten Sitzungen verwendet werden?

Sitzungen sind normalerweise dann nützlich, wenn Sie die Aktivitäten des Benutzers von Seite zu Seite kennen möchten. Angenommen, Sie haben einen geschützten Bereich auf der Website. Die Benutzer müssen sich nicht auf jeder Seite erneut anmelden. Sie können den Benutzer einmal anmelden lassen und seine Daten in einer Sitzungsvariablen speichern. Anschließend können Sie dieselben Daten bei weiteren Anfragen wiederverwenden. Andere Anwendungsfälle sind die Arbeit an einem Einkaufssystem, bei dem der Benutzer Artikel in den Einkaufswagen legen muss.

Alternativ verwendet CodeIgniter auch Sitzungen, um Daten nur einmal bei der nächsten Anfrage verfügbar zu machen. Dies ist nützlich, wenn Sie möglicherweise einen Datenbankeintrag bearbeitet und aktualisiert haben und dem Benutzer eine Rückmeldung geben möchten, wenn er auf eine andere Seite weitergeleitet wird.

Senden von Flash-Nachrichten an andere Seiten mit CI-Sitzungen

In diesem Abschnitt erfahren Sie, wie Sie mithilfe der Sitzungsbibliothek in Flash-Nachrichten an andere Seiten senden CodeIgniter

Erstellen Sie eine neue Datei in SessionController

application/controllers/SessionController.php

Fügen Sie den folgenden Code hinzu

<?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'));
    }
}

HIER,

  • Klasse SessionController erweitert CI_Controller {…} definiert die SessionController-Klasse und erweitert die übergeordnete Controller-Klasse.
  • Die öffentliche Funktion __construct() {…} definiert die Konstruktormethode, die die übergeordnete Klasse initialisiert und den URL-Helfer und die Sitzungsbibliothek lädt.
  • Die öffentliche Funktion index() {…} definiert die Sitzungsindexmethode, die die Sitzungsindexansicht lädt.
  • Die öffentliche Funktion flash_message(){…} definiert die Flash-Nachrichtenmethode, die die Flash-Daten festlegt und dann zur flash_index-Route umleitet

Lassen Sie uns nun die Ansicht erstellen, die den Wert der Sitzungsdaten anzeigt.

Erstellen Sie eine neue Verzeichnissitzung in application/views

Erstellen Sie eine neue Datei index.php in application/views/sessions

Fügen Sie den folgenden Code hinzu

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

HIER,

session->userdata('msg');?> ruft den Wert der Sitzungsdaten mit dem Schlüssel von msg ab und zeigt ihn im Browser an.

Lassen Sie uns nun die Routen für unsere Session-Flash-Methode erstellen

Öffnen Sie application/config/routes.php

Fügen Sie die folgenden Zeilen hinzu

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

Starten wir nun den integrierten Server für PHP und testen Sie unsere Flash-Nachrichten

Öffnen Sie das Terminal

Führen Sie den folgenden Befehl aus

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

HIER,

Der obige Befehl navigiert zum Anwendungscodeverzeichnis und startet den integrierten Server auf Port 3000.

Hinweis: Der Anwendungspfad muss mit dem Pfad übereinstimmen, in den Sie CodeIgniter heruntergeladen haben, und Sie können jede freie Portnummer auf Ihrem Computer verwenden. Es ist nicht notwendig, Port 3000 zu verwenden.

Laden Sie die folgende URL in Ihren Webbrowser: http://localhost:3000/flash_message

Sie werden zur folgenden URL weitergeleitet und erhalten die folgenden Ergebnisse: http://localhost:3000/flash_index

Senden von Flash-Nachrichten an andere Seiten

Klicken Sie auf die Schaltfläche „Aktualisieren“ Ihres Webbrowsers oder drücken Sie F5

Sie erhalten nun folgende Ergebnisse

Senden von Flash-Nachrichten an andere Seiten

Speichern von Benutzerdaten in CI-Sitzungen

Schauen wir uns nun ein etwas fortgeschritteneres Beispiel an. Der Einfachheit halber simulieren wir die Benutzerauthentifizierung und führen nicht die eigentliche Implementierung der Überprüfung des Benutzerdatensatzes in der Datenbank und des übermittelten Passworts durch.

Beginnen wir mit den Routen

Öffnen Sie die Datei „routes.php“ in „application/config“.

Fügen Sie die folgenden Routen hinzu

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

HIER,

  • $route['login'] = 'sessioncontroller/login'; Definiert die Route, die das Anmeldeformular anzeigt
  • $route['authenticate'] = 'sessioncontroller/authenticate'; Definiert die Route, die eine erfolgreiche Benutzeranmeldung simuliert und die Sitzungsanmeldedaten festlegt.
  • $route['settings'] = 'sessioncontroller/settings'; Definiert eine geschützte Seite, die nur für angemeldete Benutzer zugänglich sein sollte
  • $route['dashboard'] = 'sessioncontroller/dashboard'; Definiert eine geschützte Seite, die nur für angemeldete Benutzer zugänglich sein sollte.
  • $route['logout'] = 'sessioncontroller/logout'; meldet den Benutzer ab, indem die Sitzungsdaten zerstört werden

Lassen Sie uns nun den SessionController aktualisieren

Öffnen Sie application/controllers/SessionController.php

Fügen Sie die folgenden Methoden hinzu

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'));
    }

HIER,

  • Die öffentliche Funktion check_auth($page) {…} definiert die Methode, die prüft, ob der Benutzer angemeldet ist, und dann den Zugriff auf die Seite zulässt. Wenn ein Benutzer nicht angemeldet ist, wird er mit einer Flash-Meldung zur Anmeldeseite weitergeleitet.
  • Die öffentliche Funktion login() {…} lädt die Anmeldeansicht im Sitzungsverzeichnis.
  • public function authenticate() {…} setzt die Sitzungsbenutzerdaten für die Schlüssel logged_in und username. HINWEIS: Wir überprüfen keine Anmeldedaten anhand der Datenbank. Wir gehen einfach davon aus, dass die übermittelten Daten in Ordnung sind und setzen die Sitzungsdaten.
  • öffentliche Funktion Dashboard() {…} lädt die Dashboard-Seite nach dem Aufruf von $this->check_auth('dashboard'); Dadurch wird überprüft, ob der Sitzungsschlüssel „logged_in“ festgelegt ist.
  • Die öffentliche Funktion „settings()“ {…} lädt die Einstellungsseite, die ebenfalls geschützt ist
  • Die öffentliche Funktion logout() {…} zerstört die Sitzungsdaten und meldet den Benutzer ab. Die Methode leitet auch zur Anmeldeseite weiter

CodeIgniter-Sitzungsansichten

Erstellen Sie die folgenden Ansichten in application/views/sessions

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

Fügen Sie den folgenden Code zu dashboard.php hinzu

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

HIER,

session->userdata('username');?> zeigt den Benutzernamen an, den wir in der Authentifizierungsmethode festgelegt haben

Fügen Sie login.php den folgenden Code hinzu

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

HIER,

Das Anmeldeformular wird zur Authentifizierung der Route gesendet.

Fügen Sie den folgenden Code zu settings.php hinzu

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

Das war's mit unseren Ansichten. Lassen Sie uns nun unsere Anwendung testen.

In diesem Tutorial verwenden wir den integrierten PHP-Webserver, Sie können jedoch jeden Webserver verwenden, der PHP unterstützt.

Öffnen Sie das Terminal

Führen Sie den folgenden Befehl aus

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

HIER,

Der obige Befehl navigiert zum Anwendungscodeverzeichnis und startet den integrierten Server auf Port 3000.

Hinweis: Der Anwendungspfad muss mit dem Pfad übereinstimmen, in den Sie CodeIgniter heruntergeladen haben, und Sie können jede freie Portnummer auf Ihrem Computer verwenden. Es ist nicht notwendig, Port 3000 zu verwenden.

Öffnen Sie die folgende URL in Ihrem Webbrowser: http://localhost:3000/dashboard

Sie werden auf die folgende Seite weitergeleitet

CodeIgniter-Sitzungsansichten

Klicken Sie auf die Schaltfläche Anmelden

Sie werden die folgenden Ergebnisse sehen

CodeIgniter-Sitzungsansichten

Nachdem wir uns angemeldet haben, können wir nun die Sitzungsdaten sehen.

Zusammenfassung

In diesem Tutorial haben Sie die Grundlagen der CodeIgniter-Sitzungsbibliothek kennengelernt und erfahren, wie Sie damit temporäre Daten als Flash-Nachrichten speichern und dauerhaftere Daten, z. B. Benutzeranmeldedaten, speichern.