Cum să setați sesiunea în Codeigniter cu un exemplu

Managementul sesiunii CodeIgniter

Dacă ați dezvoltat aplicații desktop înainte de atunci, probabil știți că puteți defini o variabilă globală să îi atribuiți o valoare și să o utilizați pe tot parcursul ciclului de viață al aplicației, deschiderea și închiderea mai multor (1) și fiecare solicitare va avea acces la variabila globală.

Cu alte cuvinte, starea aplicației este menținută. Adică, dacă atunci când v-ați conectat, setați numele companiei la o variabilă globală, atunci chiar și după ce închideți formularul de autentificare, starea numelui companiei este păstrată.

HTTP funcționează puțin diferit față de scenariul de mai sus pe care tocmai l-am descris. Este apatrid. Adică să spui că orice faci într-o cerere nu perseverează în următoarea cerere. T

o rezolvați această problemă. Avem două (2) soluții în PHP. Putem fie să lucrăm cu cookie-uri, care sunt fișiere mici plasate pe computerul utilizatorului, fie să lucrăm cu sesiuni care sunt similare cookie-urilor, dar sunt în schimb stocate pe server și au o capacitate mai mare decât cookie-urile.

Când să folosiți sesiunile?

Sesiunile sunt de obicei utile atunci când doriți să cunoașteți activitățile utilizatorului de la o pagină la alta. De exemplu, să presupunem că aveți o zonă protejată pe site. Utilizatorii nu trebuie să se autentifice pe fiecare pagină. Puteți lăsa utilizatorul să se conecteze o dată și să își stocheze detaliile într-o variabilă de sesiune, apoi să refolosească aceleași date pentru solicitări ulterioare. Alte cazuri de utilizare includ atunci când lucrează la un sistem de cumpărături și utilizatorul trebuie să adauge articole în coșul de cumpărături.

Alternativ, CodeIgniter folosește și sesiuni pentru a face datele disponibile o singură dată la următoarea solicitare. Acest lucru este util dacă ați putea fi editat și actualizat o înregistrare a bazei de date și doriți să returnați ceva feedback utilizatorului atunci când sunt redirecționați către o altă pagină.

Trimiterea de mesaje Flash către alte pagini cu CI Sessions

În această secțiune, veți afla despre trimiterea de mesaje flash către alte pagini folosind biblioteca de sesiuni în CodeIgniter

Creați un fișier nou SessionController în

application/controllers/SessionController.php

Adăugați următorul cod

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

AICI,

  • clasa SessionController extinde CI_Controller {…} definește clasa SessionController și extinde clasa controlerului părinte.
  • funcția publică __construct() {…} definește metoda constructorului care inițializează clasa părinte și încarcă url helper și biblioteca de sesiune.
  • funcția publică index() {…} definește metoda indexului sesiunii care încarcă vizualizarea indexului sesiunii.
  • funcția publică flash_message(){…} definește metoda mesajului flash care setează datele flash apoi redirecționează către ruta flash_index

Să creăm acum vizualizarea care va afișa valoarea datelor sesiunii.

Creați o nouă sesiune de director în aplicație/vizualizări

Creați un nou fișier index.php în application/views/sessions

Adăugați următorul cod

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

AICI,

session->userdata('msg');?> preia valoarea datelor sesiunii cu cheia msg și o afișează în browser.

Să creăm acum rutele pentru metoda noastră flash de sesiune

Deschide aplicația/config/routes.php

Adăugați următoarele rânduri

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

Să începem acum serverul încorporat pentru PHP și testați mesajele noastre flash

Deschide terminalul

Rulați următoarea comandă

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

AICI,

Comanda de mai sus navighează în directorul de cod al aplicației și pornește serverul încorporat pe portul 3000.

Notă: calea aplicației trebuie să se potrivească cu calea de unde ați descărcat CodeIgniter și puteți utiliza orice număr de port care este liber pe computer. Nu este necesar să utilizați portul 3000.

Încărcați următoarea adresă URL în browserul dvs. web: http://localhost:3000/flash_message

Veți fi redirecționat către următoarea adresă URL și veți obține următoarele rezultate: http://localhost:3000/flash_index

Trimiterea de mesaje flash către alte pagini

Faceți clic pe butonul de reîmprospătare al browserului dvs. web sau apăsați F5

Acum veți obține următoarele rezultate

Trimiterea de mesaje flash către alte pagini

Stocarea datelor utilizatorului în sesiunile CI

Să ne uităm acum la un exemplu puțin mai avansat. Pentru a simplifica, vom simula autentificarea utilizatorului și nu vom face implementarea efectivă a verificării înregistrării utilizatorului în baza de date și a parolei trimise.

Să începem cu traseele

Deschideți routes.php situat în aplicație/config

Adăugați următoarele rute

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

AICI,

  • $route['login'] = 'sessioncontroller/login'; definește ruta care afișează formularul de autentificare
  • $route['authenticate'] = 'sessioncontroller/authenticate'; definește ruta care simulează autentificarea cu succes a utilizatorului și setează datele de conectare ale sesiunii.
  • $route['settings'] = 'sessioncontroller/settings'; definește o pagină protejată care ar trebui să fie accesibilă numai utilizatorilor conectați
  • $route['dashboard'] = 'sessioncontroller/tabloul de bord'; definește o pagină protejată care ar trebui să fie accesibilă numai utilizatorilor conectați.
  • $route['logout'] = 'sessioncontroller/logout'; deconectează utilizatorul prin distrugerea datelor de sesiune

Să actualizăm acum SessionController

Deschideți aplicația/controlere/SessionController.php

Adăugați următoarele metode

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

AICI,

  • funcția publică check_auth($page) {…} definește metoda care verifică dacă utilizatorul este conectat, apoi permite accesul la pagină. Dacă un utilizator nu este autentificat, atunci utilizatorul este redirecționat către pagina de conectare cu un mesaj flash.
  • funcția publică login() {…} încarcă vizualizarea de conectare situată în directorul de sesiuni.
  • funcția publică authenticate() {…} setează datele utilizatorului de sesiune pentru cheile logged_in și username. NOTĂ: Nu verificăm detaliile de conectare în baza de date. Pur și simplu presupunem că detaliile trimise sunt ok și setăm datele sesiunii.
  • funcția publică dashboard() {…} încarcă pagina tabloului de bord după apelarea $this->check_auth('tabloul de bord'); care verifică dacă cheia de sesiune logged_in este setată.
  • public function settings() {…} încarcă pagina de setări care este, de asemenea, protejată
  • public function logout() {…} distruge datele sesiunii și deconectează utilizatorul. Metoda redirecționează și către pagina de conectare

Vizualizări de sesiune CodeIgniter

Creați următoarele vizualizări în aplicație/vizualizări/sesiuni

  • tabloul de bord.php
  • login.php
  • setări.php

Adăugați următorul cod la 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>

AICI,

session->userdata('username');?> afișează numele de utilizator pe care l-am setat în metoda de autentificare

Adăugați următorul cod la 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>

AICI,

Formularul de autentificare se trimite pentru autentificarea rutei.

Adăugați următorul cod la 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>

Asta e pentru opiniile noastre. Să testăm acum aplicația noastră.

În acest tutorial, folosim serverul web PHP încorporat, dar puteți folosi orice server web care acceptă PHP.

Deschide terminalul

Rulați următoarea comandă

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

AICI,

Comanda de mai sus navighează în directorul de cod al aplicației și pornește serverul încorporat pe portul 3000.

Notă: calea aplicației trebuie să se potrivească cu calea de unde ați descărcat CodeIgniter și puteți utiliza orice număr de port care este liber pe computer. Nu este necesar să utilizați portul 3000.

Deschideți următoarea adresă URL în browserul dvs. web: http://localhost:3000/dashboard

veți fi redirecționat către următoarea pagină

Vizualizări de sesiune CodeIgniter

Faceți clic pe butonul Autentificare

Veți vedea următoarele rezultate

Vizualizări de sesiune CodeIgniter

După ce ne conectăm, acum putem vedea datele sesiunii.

Rezumat

În acest tutorial, ați învățat elementele de bază ale bibliotecii de sesiuni CodeIgniter și ați învățat cum să o utilizați pentru a stoca date temporale ca mesaje flash și cum să utilizați stocarea mai multor date permanente, adică datele de conectare ale utilizatorului.