Sessie instellen in Codeigniter met voorbeeld

CodeIgniter-sessiebeheer

Als u al eerder desktopapplicaties heeft ontwikkeld, weet u waarschijnlijk dat u een globale variabele kunt definiëren, er een waarde aan kunt toekennen en deze kunt gebruiken gedurende de levenscyclus van de applicatie, waarbij u meer dan één (1) opent en sluit en elk verzoek toegang heeft tot de globale variabele.

Met andere woorden: de status van de applicatie blijft behouden. Dat wil zeggen dat als u bij het inloggen de bedrijfsnaam instelt op een globale variabele, zelfs nadat u het inlogformulier sluit, blijft die status van de bedrijfsnaam behouden.

HTTP werkt iets anders dan het bovenstaande scenario dat we zojuist hebben beschreven. Het is staatloos. Dat wil zeggen dat wat u ook doet in het ene verzoek, niet volhardt in het volgende verzoek. T

o dit probleem omzeilen. We hebben twee (2) oplossingen in PHP. We kunnen werken met cookies, kleine bestanden die op de computer van de gebruiker worden geplaatst, of met sessies die vergelijkbaar zijn met cookies, maar in plaats daarvan op de server worden opgeslagen en een grotere capaciteit hebben dan cookies.

Wanneer sessies gebruiken?

Sessies zijn meestal handig als u de activiteiten van de gebruiker van pagina tot pagina wilt kennen. Stel dat u bijvoorbeeld een beschermd gebied op de website heeft. De gebruikers hoeven niet op elke pagina in te loggen. U kunt de gebruiker eenmalig laten inloggen en zijn/haar DE opslaantails in een sessievariabele en hergebruik vervolgens dezelfde gegevens bij verdere verzoeken. Andere gebruiksscenario's zijn onder meer het werken aan een winkelsysteem en de gebruiker moet items aan het winkelwagentje toevoegen.

Als alternatief gebruikt CodeIgniter ook sessies om gegevens slechts één keer beschikbaar te stellen bij de volgende aanvraag. Dit is handig als u een databaserecord moet bewerken en bijwerken, en u feedback wilt geven aan de gebruiker wanneer deze naar een andere pagina wordt doorgestuurd.

Flash-berichten naar andere pagina's verzenden met CI-sessies

In dit gedeelte leert u hoe u Flash-berichten naar andere pagina's kunt verzenden met behulp van de sessiebibliotheek in CodeIgniter

Maak een nieuw bestand SessionController in

application/controllers/SessionController.php

Voeg de volgende toewing code

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

  • class SessionController breidt CI_Controller uit {…} definieert de SessionController-klasse en breidt de bovenliggende controllerklasse uit.
  • public function __construct() {…} definieert de constructormethode die de bovenliggende klasse initialiseert en de url-helper en sessiebibliotheek laadt.
  • public function index() {…} definieert de sessie-indexmethode die de sessie-indexweergave laadt.
  • public function flash_message(){…} definieert de flash-berichtmethode die de flash-gegevens instelt en vervolgens doorverwijst naar de flash_index-route

Laten we nu de weergave maken waarin de waarde van de sessiegegevens wordt weergegeven.

Maak een nieuwe directorysessie in application/views

Maak een nieuw bestand index.php in application/views/sessions

Voeg de volgende toewing code

<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');?> haalt de waarde van de sessiegegevens op met de sleutel van msg en geeft deze weer in de browser.

Laten we nu de routes maken voor onze sessie-flash-methode

Open applicatie/config/routes.php

Voeg de volgende toewing lijnen

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

Laten we nu de ingebouwde server starten PHP en test onze flashberichten

Open de terminal

Voer het volgende uitwing commando

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

HIER,

Met de bovenstaande opdracht bladert u naar de map met toepassingscodes en start u de ingebouwde server op poort 3000.

Let op: het applicatiepad moet overeenkomen met het pad waar u CodeIgniter hebt gedownload, en u kunt elk poortnummer gebruiken dat vrij is op uw computer. Het is niet nodig om poort 3000 te gebruiken.

Laad de volgendewing URL in uw webbrowser: http://localhost:3000/flash_message

U wordt doorgestuurd naar het vervolgwing URL, en u krijgt de volgende informatiewing resultaten: http://localhost:3000/flash_index

Flash-berichten naar andere pagina's verzenden

Klik op de vernieuwingsknop van uw webbrowser of druk op F5

Je krijgt nu het vervolgwing

Flash-berichten naar andere pagina's verzenden

Gebruikersgegevens opslaan in CI-sessies

Laten we nu naar een iets geavanceerder voorbeeld kijken. Om het eenvoudig te maken, zullen we gebruikersauthenticatie simuleren en niet de daadwerkelijke implementatie uitvoeren van het verifiëren van het gebruikersrecord in de database en het ingediende wachtwoord.

Laten we beginnen met de routes

Open routes.php in application/config

Voeg de volgende toewing wegen

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

HIER,

  • $route['login'] = 'sessiecontroller/login'; definieert de route die het inlogformulier weergeeft
  • $route['authenticate'] = 'sessiecontroller/authenticeren'; definieert de route die succesvolle gebruikersaanmelding simuleert en stelt de aanmeldingsgegevens van de sessie in.
  • $route['settings'] = 'sessiecontroller/instellingen'; definieert een beveiligde pagina die alleen toegankelijk mag zijn voor ingelogde gebruikers
  • $route['dashboard'] = 'sessiecontroller/dashboard'; definieert een beveiligde pagina die alleen toegankelijk mag zijn voor ingelogde gebruikers.
  • $route['uitloggen'] = 'sessiecontroller/uitloggen'; logt de gebruiker uit door de sessiegegevens te vernietigen

Laten we nu de SessionController bijwerken

Open applicatie/controllers/SessionController.php

Voeg de volgende toewing methoden

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,

  • public function check_auth($page) {…} definieert de methode die controleert of de gebruiker is ingelogd en vervolgens toegang tot de pagina toestaat. Als een gebruiker niet is ingelogd, wordt de gebruiker met een flashbericht doorgestuurd naar de inlogpagina.
  • public function login() {…} laadt de inlogweergave in de sessiemap.
  • public function authenticate() {…} stelt de sessiegebruikersgegevens in voor de sleutels login_in en gebruikersnaam. OPMERKING: We verifiëren geen login-details tegen de databank. We gaan gewoon uit van de ingediende details zijn in orde en stel de sessiegegevens in.
  • public function dashboard() {…} laadt de dashboardpagina na het aanroepen van $this->check_auth('dashboard'); waarmee wordt gecontroleerd of de ingelogde sessiesleutel is ingesteld.
  • public function settings() {…} laadt de instellingenpagina die ook beveiligd is
  • public function logout() {…} vernietigt de sessiegegevens en logt de gebruiker uit. De methode leidt ook door naar de inlogpagina

CodeIgniter-sessieweergaven

Maak de volgendewing weergaven in toepassing/weergaven/sessies

  • dashboard.php
  • inloggen.php
  • settings.php

Voeg de volgende toewing code naar 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>

HIER,

session->userdata('username');?> geeft de gebruikersnaam weer die we hebben ingesteld in de authenticatiemethode

Voeg de volgende toewing code voor 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>

HIER,

Het inlogformulier wordt verzonden om de route te verifiëren.

Voeg de volgende toewing code naar 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>

Dat was het voor onze opvattingen. Laten we nu onze applicatie testen.

In deze tutorial gebruiken we de ingebouwde PHP-webserver, maar u kunt elke webserver gebruiken die PHP ondersteunt.

Open de terminal

Voer het volgende uitwing commando

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

HIER,

Met de bovenstaande opdracht bladert u naar de map met toepassingscodes en start u de ingebouwde server op poort 3000.

Let op: het applicatiepad moet overeenkomen met het pad waar u CodeIgniter hebt gedownload, en u kunt elk poortnummer gebruiken dat vrij is op uw computer. Het is niet nodig om poort 3000 te gebruiken.

Open het volgendewing URL in uw webbrowser: http://localhost:3000/dashboard

u wordt doorgestuurd naar de volgende paginawing pagina

CodeIgniter-sessieweergaven

Klik op de knop Inloggen

Je zult het volgende zienwing

CodeIgniter-sessieweergaven

Nadat we zijn ingelogd, kunnen we nu de sessiegegevens zien.

Samengevat

In deze tutorial hebt u de basisbeginselen van de CodeIgniter-sessiebibliotheek geleerd en geleerd hoe u deze kunt gebruiken om tijdelijke gegevens op te slaan als flash-berichten en hoe u meer permanente gegevens kunt opslaan, dat wil zeggen gebruikersaanmeldingsgegevens.