Come impostare la sessione in Codeigniter con l'esempio

Gestione delle sessioni CodeIgniter

Se hai sviluppato applicazioni desktop prima di allora, probabilmente sai che puoi definire una variabile globale, assegnarle un valore e utilizzarla per tutto il ciclo di vita dell'applicazione aprendone e chiudendone più di una (1) e ciascuna richiesta avrà accesso a la variabile globale.

In altre parole, lo stato dell'applicazione viene mantenuto. Vale a dire se quando hai effettuato l'accesso hai impostato il nome dell'azienda su una variabile globale, anche dopo aver chiuso il modulo di accesso lo stato del nome dell'azienda viene conservato.

HTTP funziona in modo leggermente diverso dallo scenario sopra descritto. È apolide. Cioè, qualunque cosa tu faccia in una richiesta non persevera nella richiesta successiva. T

o risolvere questo problema. Abbiamo due (2) soluzioni in PHP. Possiamo lavorare con i cookie, che sono piccoli file depositati sul computer dell'utente, oppure lavorare con sessioni che sono simili ai cookie ma che sono invece memorizzati sul server e hanno una capacità maggiore dei cookie.

Quando utilizzare le sessioni?

Le sessioni sono solitamente utili quando vuoi conoscere le attività dell'utente da una pagina all'altra. Ad esempio, supponiamo che tu abbia un'area protetta sul sito web. Gli utenti non devono effettuare il login su ogni pagina. Puoi consentire all'utente di effettuare il login una volta e memorizzare i suoi dettagli in una variabile di sessione, quindi riutilizzare gli stessi dati in ulteriori richieste. Altri casi d'uso includono quando si lavora su un sistema di acquisto e l'utente deve aggiungere articoli al carrello.

In alternativa, CodeIgniter utilizza anche le sessioni per rendere i dati disponibili solo una volta alla richiesta successiva. Questo è utile se potresti modificare e aggiornare un record del database e se desideri restituire un feedback all'utente quando viene reindirizzato a un'altra pagina.

Invio di messaggi Flash ad altre pagine con sessioni CI

In questa sezione imparerai come inviare messaggi flash ad altre pagine utilizzando la libreria di sessione in CodeIgniter

Crea un nuovo file SessionController in

application/controllers/SessionController.php

Aggiungere il seguente codice

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

QUI,

  • class SessionController extends CI_Controller {…} definisce la classe SessionController ed estende la classe del controller principale.
  • la funzione pubblica __construct() {…} definisce il metodo di costruzione che inizializza la classe genitore e carica l'helper URL e la libreria di sessione.
  • public function index() {…} definisce il metodo dell'indice di sessione che carica la vista dell'indice di sessione.
  • la funzione pubblica flash_message(){…} definisce il metodo del messaggio flash che imposta i dati flash quindi reindirizza alla rotta flash_index

Creiamo ora la vista che mostrerà il valore dei dati della sessione.

Crea una nuova sessione di directory in application/views

Crea un nuovo file index.php in application/views/sessions

Aggiungere il seguente codice

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

QUI,

session->userdata('msg');?> recupera il valore dei dati della sessione con la chiave msg e lo visualizza nel browser.

Creiamo ora i percorsi per il nostro metodo flash di sessione

Apri application/config/routes.php

Aggiungere le seguenti righe

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

Avviamo ora il server integrato per PHP e prova i nostri messaggi flash

Apri il terminale

Esegui il seguente comando

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

QUI,

Il comando precedente accede alla directory del codice dell'applicazione e avvia il server integrato sulla porta 3000.

Nota: il percorso dell'applicazione deve corrispondere al percorso in cui hai scaricato CodeIgniter e puoi utilizzare qualsiasi numero di porta disponibile sul tuo computer. Non è necessario utilizzare la porta 3000.

Carica il seguente URL nel tuo browser web: http://localhost:3000/flash_message

Verrai reindirizzato al seguente URL e otterrai i seguenti risultati: http://localhost:3000/flash_index

Invio di messaggi Flash ad altre pagine

Fare clic sul pulsante di aggiornamento del browser Web o premere F5

Ora otterrai i seguenti risultati

Invio di messaggi Flash ad altre pagine

Memorizzazione dei dati utente nelle sessioni CI

Consideriamo ora un esempio leggermente più avanzato. Per semplificare, simuleremo l'autenticazione dell'utente e non eseguiremo l'effettiva implementazione della verifica del record dell'utente nel database e della password inviata.

Cominciamo dai percorsi

Apri Routes.php che si trova in application/config

Aggiungi i seguenti percorsi

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

QUI,

  • $route['login'] = 'sessioncontroller/login'; definisce il percorso che visualizza il modulo di accesso
  • $route['authenticate'] = 'sessioncontroller/authenticate'; definisce il percorso che simula l'accesso utente riuscito e imposta i dati di accesso della sessione.
  • $route['settings'] = 'sessioncontroller/settings'; definisce una pagina protetta che dovrebbe essere accessibile solo agli utenti registrati
  • $route['dashboard'] = 'sessioncontroller/dashboard'; definisce una pagina protetta che dovrebbe essere accessibile solo agli utenti registrati.
  • $route['logout'] = 'sessioncontroller/logout'; disconnette l'utente distruggendo i dati della sessione

Aggiorniamo ora il SessionController

Apri application/controllers/SessionController.php

Aggiungere i seguenti metodi

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

QUI,

  • public function check_auth($page) {…} definisce il metodo che controlla se l'utente è registrato e quindi consente l'accesso alla pagina. Se un utente non ha effettuato l'accesso, viene reindirizzato alla pagina di accesso con un messaggio flash.
  • public function login() {…} carica la vista di login situata nella directory sessions.
  • public function authenticate() {…} imposta i dati utente della sessione per le chiavi logged_in e username. NOTA: non stiamo verificando alcun dettaglio di accesso rispetto al database. Stiamo semplicemente assumendo che i dettagli inviati siano corretti e impostati i dati della sessione.
  • public function dashboard() {…} carica la pagina del dashboard dopo aver chiamato $this->check_auth('dashboard'); che verifica che la chiave di sessione logged_in sia impostata.
  • public function settings() {…} carica la pagina delle impostazioni che è anch'essa protetta
  • public function logout() {…} distrugge i dati della sessione e disconnette l'utente. Il metodo reindirizza anche alla pagina di accesso

Viste della sessione CodeIgniter

Crea le seguenti viste in applicazione/viste/sessioni

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

Aggiungere il seguente codice a 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>

QUI,

session->userdata('username');?> visualizza il nome utente che abbiamo impostato nel metodo di autenticazione

Aggiungere il seguente codice a 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>

QUI,

Il modulo di accesso invia per autenticare il percorso.

Aggiungere il seguente codice a 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>

Questo è tutto per le nostre opinioni. Testiamo ora la nostra applicazione.

In questo tutorial utilizzeremo il server Web PHP integrato, ma puoi utilizzare qualsiasi server Web che supporti PHP.

Apri il terminale

Esegui il seguente comando

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

QUI,

Il comando precedente accede alla directory del codice dell'applicazione e avvia il server integrato sulla porta 3000.

Nota: il percorso dell'applicazione deve corrispondere al percorso in cui hai scaricato CodeIgniter e puoi utilizzare qualsiasi numero di porta disponibile sul tuo computer. Non è necessario utilizzare la porta 3000.

Apri il seguente URL nel tuo browser web: http://localhost:3000/dashboard

verrai reindirizzato alla pagina seguente

Viste della sessione CodeIgniter

Fare clic sul pulsante Accedi

Vedrai i seguenti risultati

Viste della sessione CodeIgniter

Dopo aver effettuato l'accesso, ora siamo in grado di vedere i dati della sessione.

Sintesi

In questo tutorial hai appreso le nozioni di base della libreria di sessione CodeIgniter e come utilizzarla per archiviare dati temporali come messaggi flash e come utilizzare per archiviare dati più permanenti, ovvero i dati di accesso dell'utente.