Hur man ställer in session i Codeigniter med exempel

CodeIgniter Sessionshantering

Om du har utvecklat skrivbordsapplikationer innan dess vet du förmodligen att du kan definiera en global variabel som tilldelar den ett värde och använda den under hela livscykeln för applikationen som öppnar och stänger mer än en (1) och varje begäran kommer att ha tillgång till den globala variabeln.

Med andra ord, tillståndet för ansökan bibehålls. Det vill säga om du ställer in företagsnamnet till en global variabel när du loggade in så bevaras den statusen för företagsnamnet även efter att du stänger inloggningsformuläret.

HTTP fungerar lite annorlunda än ovanstående scenario som vi just har beskrivit. Den är statslös. Det vill säga att vad du än gör i en begäran inte framhärdar i nästa begäran. T

o lösa det här problemet. Vi har två (2) lösningar i PHP. Vi kan antingen arbeta med cookies som är små filer som placeras på användarens dator eller arbeta med sessioner som liknar cookies men istället lagras på servern och har en större kapacitet än cookies.

När ska man använda sessioner?

Sessioner är vanligtvis användbara när du vill veta användarens aktiviteter från sida till sida. Låt oss till exempel säga att du har ett skyddat område på webbplatsen. Användarna behöver inte logga in på varje sida. Du kan låta användaren logga in en gång och lagra sina uppgifter i en sessionsvariabel och sedan återanvända samma data vid ytterligare förfrågningar. Andra användningsfall inkluderar när man arbetar med ett shoppingsystem och användaren måste lägga till varor i kundvagnen.

Alternativt använder CodeIgniter också sessioner för att endast göra data tillgänglig en gång vid nästa begäran. Detta är användbart att du kan ha redigerat och uppdaterat en databaspost, och du vill returnera lite feedback till användaren när de omdirigeras till en annan sida.

Skickar Flash-meddelanden till andra sidor med CI-sessioner

I det här avsnittet kommer du att lära dig hur du skickar flashmeddelanden till andra sidor med hjälp av sessionsbiblioteket i CodeIgniter

Skapa en ny fil SessionController i

application/controllers/SessionController.php

Lägg till följande kod

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

HÄR,

  • class SessionController utökar CI_Controller {...} definierar SessionController-klassen och utökar den överordnade kontrollerklassen.
  • public funktion __construct() {...} definierar konstruktormetoden som initierar den överordnade klassen, och laddar url-hjälpen och sessionsbiblioteket.
  • public function index() {...} definierar sessionsindexmetoden som laddar sessionsindexvyn.
  • offentlig funktion flash_message(){...} definierar flashmeddelandemetoden som ställer in flashdata och omdirigerar sedan till flash_index-rutten

Låt oss nu skapa vyn som visar värdet på sessionsdata.

Skapa en ny katalogsession i applikation/vyer

Skapa en ny fil index.php i application/views/sessions

Lägg till följande kod

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

HÄR,

session->userdata('msg');?> hämtar värdet på sessionsdata med nyckeln till msg och visar det i webbläsaren.

Låt oss nu skapa rutterna för vår session flash-metod

Öppna application/config/routes.php

Lägg till följande rader

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

Låt oss nu starta den inbyggda servern för PHP och testa våra snabbmeddelanden

Öppna terminalen

Kör följande kommando

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

HÄR,

Ovanstående kommando bläddrar till programkodkatalogen och startar den inbyggda servern på port 3000.

Obs: applikationssökvägen måste matcha sökvägen där du laddade ner CodeIgniter, och du kan använda vilket portnummer som helst som är gratis på din dator. Det är inte nödvändigt att använda port 3000.

Ladda följande URL i din webbläsare: http://localhost:3000/flash_message

Du kommer att omdirigeras till följande URL och du får följande resultat: http://localhost:3000/flash_index

Skickar Flash-meddelanden till andra sidor

Klicka på uppdateringsknappen i din webbläsare eller tryck på F5

Du kommer nu att få följande resultat

Skickar Flash-meddelanden till andra sidor

Lagring av användardata i CI-sessioner

Låt oss nu titta på ett lite mer avancerat exempel. För att göra det enkelt kommer vi att simulera användarautentisering och inte göra själva implementeringen av att verifiera användarposten i databasen och det inlämnade lösenordet.

Låt oss börja med rutterna

Öppna routes.php som finns i application/config

Lägg till följande rutter

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

HÄR,

  • $route['login'] = 'sessionskontroller/inloggning'; definierar rutten som visar inloggningsformuläret
  • $route['authenticate'] = 'sessionskontroller/autenticera'; definierar rutten som simulerar framgångsrik användarinloggning och ställer in sessionsinloggningsdata.
  • $route['settings'] = 'sessionskontroller/inställningar'; definierar en skyddad sida som endast ska vara tillgänglig för inloggade användare
  • $route['dashboard'] = 'sessionskontroller/dashboard'; definierar en skyddad sida som endast ska vara tillgänglig för inloggade användare.
  • $route['logout'] = 'sessionskontroller/utloggning'; loggar ut användaren genom att förstöra sessionsdata

Låt oss nu uppdatera SessionController

Öppna applikation/kontroller/SessionController.php

Lägg till följande metoder

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

HÄR,

  • offentlig funktion check_auth($page) {...} definierar metoden som kontrollerar om användaren är inloggad och tillåter sedan åtkomst till sidan. Om en användare inte är inloggad omdirigeras användaren till inloggningssidan med ett snabbmeddelande.
  • public function login() {...} laddar inloggningsvyn som finns i sessionskatalogen.
  • public function authenticate() {...} ställer in sessionsanvändardata för nycklarna loged_in och användarnamn. OBS: Vi verifierar inga inloggningsdetaljer mot databasen. Vi antar helt enkelt att de inlämnade uppgifterna är ok och ställer in sessionsdata.
  • public function dashboard() {...} läser in instrumentpanelssidan efter att ha anropat $this->check_auth('dashboard'); som verifierar att inloggad sessionsnyckel är inställd.
  • public function settings() {...} laddar inställningssidan som också är skyddad
  • public function logout() {...} förstör sessionsdata och loggar ut användaren. Metoden omdirigerar även till inloggningssidan

CodeIgniter-sessionsvyer

Skapa följande vyer i applikation/visningar/sessioner

  • instrumentpanel.php
  • login.php
  • settings.php

Lägg till följande kod till 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>

HÄR,

session->userdata('användarnamn');?> visar användarnamnet som vi anger i autentiseringsmetoden

Lägg till följande kod till 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>

HÄR,

Inloggningsformuläret skickas för att autentisera rutt.

Lägg till följande kod till 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>

Det är det för våra åsikter. Låt oss nu testa vår applikation.

I den här handledningen använder vi den inbyggda PHP-webbservern, men du kan använda vilken webbserver som helst som stöder PHP.

Öppna terminalen

Kör följande kommando

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

HÄR,

Ovanstående kommando bläddrar till programkodkatalogen och startar den inbyggda servern på port 3000.

Obs: applikationssökvägen måste matcha sökvägen där du laddade ner CodeIgniter, och du kan använda vilket portnummer som helst som är gratis på din dator. Det är inte nödvändigt att använda port 3000.

Öppna följande URL i din webbläsare: http://localhost:3000/dashboard

du kommer att omdirigeras till följande sida

CodeIgniter-sessionsvyer

Klicka på knappen Logga in

Du kommer att se följande resultat

CodeIgniter-sessionsvyer

Efter att vi loggat in kan vi nu se sessionsdata.

Sammanfattning

I den här handledningen har du lärt dig grunderna i CodeIgniter-sessionsbiblioteket och lärt dig hur du använder det för att lagra tidsdata som flashmeddelanden och hur du använder lagra mer permanent data, dvs användarinloggningsdata.