Hogyan állítsuk be a munkamenetet a Codeigniterben példával

CodeIgniter Session Management

Ha korábban már fejlesztett asztali alkalmazásokat, akkor valószínűleg tudja, hogy definiálhat egy globális változót, értéket rendelhet hozzá, és használhatja az alkalmazás teljes életciklusa során, egynél több (1) megnyitásakor és bezárásakor, és minden kérés hozzáférhet a a globális változó.

Más szóval, az alkalmazás állapota megmarad. Ez azt jelenti, hogy ha bejelentkezéskor a cégnevet globális változóra állítja, akkor a bejelentkezési űrlap bezárása után is megmarad a cégnév állapota.

A HTTP kissé eltér az imént leírt fenti forgatókönyvtől. Ez hontalan. Ez azt jelenti, hogy bármit teszel az egyik kérésben, az nem marad ki a következő kérésnél. T

o megkerülni ezt a problémát. Két (2) megoldásunk van PHP-ben. Dolgozhatunk a cookie-kkal, amelyek a felhasználó számítógépén elhelyezett kis fájlok, vagy olyan munkamenetekkel, amelyek hasonlóak a cookie-khoz, de ehelyett a szerveren tárolódnak, és nagyobb kapacitással rendelkeznek, mint a cookie-k.

Mikor kell használni a munkameneteket?

A munkamenetek általában akkor hasznosak, ha oldalról oldalra szeretné tudni a felhasználó tevékenységeit. Tegyük fel például, hogy van egy védett terület a webhelyen. A felhasználóknak nem kell minden oldalon bejelentkezniük. Engedélyezheti a felhasználónak, hogy egyszer bejelentkezzen, és eltárolja adatait egy munkamenet-változóban, majd újra felhasználja ugyanazokat az adatokat további kérésekhez. Egyéb felhasználási esetek közé tartozik a bevásárlórendszeren végzett munka, és a felhasználónak tételeket kell hozzáadnia a kosárhoz.

Alternatív megoldásként a CodeIgniter munkameneteket is használ annak érdekében, hogy a következő kéréskor csak egyszer tegye elérhetővé az adatokat. Ez hasznos lehet, ha szerkesztett és frissített egy adatbázisrekordot, és visszajelzést szeretne küldeni a felhasználónak, amikor átirányítják őket egy másik oldalra.

Flash-üzenetek küldése más oldalaknak a CI Sessions segítségével

Ebben a részben megtudhatja, hogyan küldhet gyorsüzeneteket más oldalakra a munkamenet-könyvtár használatával CodeIgniter

Hozzon létre egy új SessionController fájlt

application/controllers/SessionController.php

Adja hozzá a következő kódot

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

ITT,

  • osztály SessionController kiterjeszti A CI_Controller {…} meghatározza a SessionController osztályt és kiterjeszti a szülővezérlő osztályt.
  • public függvény __construct() {…} határozza meg a konstruktor metódust, amely inicializálja a szülőosztályt, és betölti az url helpert és a session könyvtárat.
  • public function index() {…} határozza meg a session index metódust, amely betölti a session index nézetet.
  • nyilvános függvény flash_message(){…} határozza meg a flash üzenet metódusát, amely beállítja a flash adatokat, majd átirányítja a flash_index útvonalra

Most hozzuk létre azt a nézetet, amely megjeleníti a munkamenet adatainak értékét.

Hozzon létre egy új címtár-munkamenetet az alkalmazásban/nézetekben

Hozzon létre egy új index.php fájlt az application/views/sessions mappában

Adja hozzá a következő kódot

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

ITT,

A session->userdata('msg');?> lekéri a munkamenet adatainak értékét az msg kulcsával, és megjeleníti a böngészőben.

Most hozzuk létre a munkamenet flash módszerünk útvonalait

Nyissa meg az application/config/routes.php fájlt

Adja hozzá a következő sorokat

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

Most indítsuk el a beépített szervert a számára PHP és tesztelje a gyorsüzeneteinket

Nyissa meg a terminált

Futtassa a következő parancsot

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

ITT,

A fenti parancs tallózással az alkalmazás kódkönyvtárába lép, és elindítja a beépített szervert a 3000-es porton.

Megjegyzés: az alkalmazás elérési útjának meg kell egyeznie azzal az elérési úttal, ahová letöltötte a CodeIgnitert, és bármilyen ingyenes portszámot használhat a számítógépén. Nem szükséges a 3000-es portot használni.

Töltse be a következő URL-t a böngészőjébe: http://localhost:3000/flash_message

A rendszer átirányítja a következő URL-re, és a következő eredményeket kapja: http://localhost:3000/flash_index

Flash üzenetek küldése más oldalakra

Kattintson a böngésző frissítési gombjára, vagy nyomja meg az F5 billentyűt

Most a következő eredményeket kapja

Flash üzenetek küldése más oldalakra

Felhasználói adatok tárolása a CI-munkamenetekben

Nézzünk most egy kicsit fejlettebb példát. Az egyszerűség kedvéért a felhasználói hitelesítést szimuláljuk, és nem végezzük el az adatbázisban lévő felhasználói rekord és a beküldött jelszó tényleges ellenőrzését.

Kezdjük az útvonalakkal

Nyissa meg az application/config-ban található routes.php-t

Adja hozzá a következő útvonalakat

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

ITT,

  • $route['login'] = 'munkamenetvezérlő/bejelentkezés'; meghatározza a bejelentkezési űrlapot megjelenítő útvonalat
  • $route['authenticate'] = 'munkamenetvezérlő/hitelesítés'; meghatározza a sikeres felhasználói bejelentkezést szimuláló útvonalat, és beállítja a munkamenet bejelentkezési adatait.
  • $route['settings'] = 'munkamenetvezérlő/beállítások'; olyan védett oldalt határoz meg, amelyhez csak bejelentkezett felhasználók férhetnek hozzá
  • $route['dashboard'] = 'munkamenetvezérlő/műszerfal'; olyan védett oldalt határoz meg, amelyhez csak bejelentkezett felhasználók férhetnek hozzá.
  • $route['logout'] = 'munkamenetvezérlő/kijelentkezés'; kijelentkezteti a felhasználót a munkamenet adatainak megsemmisítésével

Most frissítsük a SessionControllert

Nyissa meg az application/controllers/SessionController.php-t

Adja hozzá a következő módszereket

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

ITT,

  • public function check_auth($page) {…} meghatározza azt a módszert, amely ellenőrzi, hogy a felhasználó bejelentkezett-e, majd engedélyezi az oldal elérését. Ha egy felhasználó nincs bejelentkezve, akkor a felhasználó egy gyorsüzenettel a bejelentkezési oldalra kerül.
  • public function login() {…} betölti a sessions könyvtárban található bejelentkezési nézetet.
  • public function authenticate() {…} beállítja a munkamenet felhasználói adatait a logged_in és a username kulcsokhoz. MEGJEGYZÉS: Nem ellenőrizzük a bejelentkezési adatokat az adatbázisban. Egyszerűen feltételezzük, hogy a beküldött adatok rendben vannak, és beállítjuk a munkamenet adatait.
  • public function dashboard() {…} betölti az irányítópult oldalt a $this->check_auth('dashboard') meghívása után; amely ellenőrzi, hogy a logged_in session kulcs be van állítva.
  • public function settings() {…} betölti a szintén védett beállítási oldalt
  • public function logout() {…} megsemmisíti a munkamenet adatait, és kijelentkezteti a felhasználót. A metódus a bejelentkezési oldalra is átirányít

CodeIgniter munkamenet-nézetek

Hozza létre a következő nézeteket az alkalmazás/nézetek/munkamenetek között

  • műszerfal.php
  • login.php
  • settings.php

Adja hozzá a következő kódot a dashboard.php fájlhoz

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

ITT,

session->userdata('username');?> megjeleníti azt a felhasználónevet, amelyet a hitelesítési módszerben adtunk meg

Adja hozzá a következő kódot a login.php-hez

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

ITT,

A bejelentkezési űrlap elküldésre kerül az útvonal hitelesítéséhez.

Adja hozzá a következő kódot a settings.php-hez

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

A mi nézeteinkért ennyi. Most teszteljük az alkalmazásunkat.

Ebben az oktatóanyagban a beépített PHP webszervert használjuk, de bármilyen PHP-t támogató webszervert használhatunk.

Nyissa meg a terminált

Futtassa a következő parancsot

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

ITT,

A fenti parancs tallózással az alkalmazás kódkönyvtárába lép, és elindítja a beépített szervert a 3000-es porton.

Megjegyzés: az alkalmazás elérési útjának meg kell egyeznie azzal az elérési úttal, ahová letöltötte a CodeIgnitert, és bármilyen ingyenes portszámot használhat a számítógépén. Nem szükséges a 3000-es portot használni.

Nyissa meg a következő URL-t a böngészőjében: http://localhost:3000/dashboard

át lesz irányítva a következő oldalra

CodeIgniter munkamenet-nézetek

Kattintson a Bejelentkezés gombra

A következő eredményeket fogja látni

CodeIgniter munkamenet-nézetek

Miután bejelentkeztünk, most már láthatjuk a munkamenet adatait.

Összegzésként

Ebben az oktatóanyagban megtanulta a CodeIgniter munkamenet-könyvtár alapjait, és megtanulta, hogyan használhatja azt időbeli adatok gyorsüzenetként történő tárolására, valamint az állandóbb adatok, azaz a felhasználói bejelentkezési adatok tárolására.