Sådan indstilles session i Codeigniter med eksempel

CodeIgniter Session Management

Hvis du har udviklet desktop-applikationer før da, ved du sikkert, at du kan definere en global variabel, tildele en værdi til den og bruge den gennem hele livscyklussen af ​​applikationen, der åbner og lukker mere end én (1), og hver anmodning vil have adgang til den globale variabel.

Med andre ord opretholdes ansøgningens tilstand. Det vil sige, at hvis du, når du loggede ind, indstiller firmanavnet til en global variabel, så bevares denne tilstand for firmanavnet, selv efter at du har lukket login-formularen.

HTTP fungerer en smule anderledes end ovenstående scenarie, som vi lige har beskrevet. Det er statsløst. Det vil sige, at hvad end du gør i en anmodning, holder ikke ud i den næste anmodning. T

o løse dette problem. Vi har to (2) løsninger i PHP. Vi kan enten arbejde med cookies, som er små filer placeret på brugerens computer eller arbejde med sessioner, der ligner cookies, men i stedet gemmes på serveren og har en større kapacitet end cookies.

Hvornår skal man bruge sessioner?

Sessioner er normalt nyttige, når du vil kende brugerens aktiviteter fra side til side. Lad os for eksempel sige, at du har et beskyttet område på hjemmesiden. Brugerne behøver ikke at logge ind på hver side. Du kan lade brugeren logge på én gang og gemme deres detaljer i en sessionsvariabel og derefter genbruge de samme data ved yderligere anmodninger. Andre anvendelsestilfælde omfatter, når der arbejdes på et indkøbssystem, og brugeren skal tilføje varer til indkøbskurven.

Alternativt bruger CodeIgniter også sessioner til kun at gøre data tilgængelige én gang ved næste anmodning. Dette er nyttigt, du har muligvis redigeret og opdateret en databasepost, og du ønsker at returnere noget feedback til brugeren, når de bliver omdirigeret til en anden side.

Sender Flash-beskeder til andre sider med CI-sessioner

I dette afsnit lærer du om at sende flash-beskeder til andre sider ved hjælp af sessionsbiblioteket i CodeIgniter

Opret en ny fil SessionController i

application/controllers/SessionController.php

Tilføj følgende kode

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

HER,

  • klasse SessionController udvider CI_Controller {...} definerer SessionController-klassen og udvider den overordnede controller-klasse.
  • public funktion __construct() {...} definerer konstruktørmetoden, der initialiserer den overordnede klasse, og indlæser url-hjælperen og sessionsbiblioteket.
  • public function index() {...} definerer sessionsindeksmetoden, der indlæser sessionsindeksvisningen.
  • offentlig funktion flash_message(){...} definerer flash-meddelelsesmetoden, som indstiller flash-dataene og derefter omdirigerer til flash_index-ruten

Lad os nu oprette den visning, der viser værdien af ​​sessionsdataene.

Opret en ny mappesession i applikation/visninger

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

Tilføj følgende kode

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

HER,

session->userdata('msg');?> henter værdien af ​​sessionsdataene med nøglen til msg og viser dem i browseren.

Lad os nu oprette ruterne til vores session flash-metode

Åbn application/config/routes.php

Tilføj følgende linjer

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

Lad os nu starte den indbyggede server til PHP og test vores flash-beskeder

Åbn terminalen

Kør følgende kommando

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

HER,

Ovenstående kommando browser til programkodebiblioteket og starter den indbyggede server på port 3000.

Bemærk: applikationsstien skal matche stien, hvor du downloadede CodeIgniter, og du kan bruge et hvilket som helst portnummer, der er gratis på din computer. Det er ikke nødvendigt at bruge port 3000.

Indlæs følgende URL i din webbrowser: http://localhost:3000/flash_message

Du vil blive omdirigeret til følgende URL, og du vil få følgende resultater: http://localhost:3000/flash_index

Sender Flash-beskeder til andre sider

Klik på opdateringsknappen i din webbrowser, eller tryk på F5

Du vil nu få følgende resultater

Sender Flash-beskeder til andre sider

Lagring af brugerdata i CI-sessioner

Lad os nu se på et lidt mere avanceret eksempel. For at gøre det enkelt, vil vi simulere brugergodkendelse og ikke udføre den faktiske implementering af at verificere brugerregistreringen i databasen og den indsendte adgangskode.

Lad os starte med ruterne

Åbn routes.php placeret i application/config

Tilføj følgende ruter

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

HER,

  • $route['login'] = 'sessionscontroller/login'; definerer ruten, der viser login-formularen
  • $route['authenticate'] = 'sessionscontroller/godkendt'; definerer ruten, der simulerer vellykket brugerlogin og indstiller sessionslogindataene.
  • $route['settings'] = 'sessionscontroller/indstillinger'; definerer en beskyttet side, der kun skal være tilgængelig for loggede brugere
  • $route['dashboard'] = 'sessionscontroller/dashboard'; definerer en beskyttet side, der kun skal være tilgængelig for loggede brugere.
  • $route['logout'] = 'sessionscontroller/logout'; logger brugeren ud ved at ødelægge sessionsdataene

Lad os nu opdatere SessionController

Åbn applikation/controllere/SessionController.php

Tilføj følgende 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'));
    }

HER,

  • offentlig funktion check_auth($page) {...} definerer metoden, der kontrollerer, om brugeren er logget, og tillader derefter adgang til siden. Hvis en bruger ikke er logget ind, bliver brugeren omdirigeret til login-siden med en flash-besked.
  • public function login() {…} indlæser login-visningen, der findes i sessionsmappen.
  • public function authenticate() {...} indstiller sessionsbrugerdataene for nøglerne logged_in og brugernavn. BEMÆRK: Vi verificerer ikke nogen logindetaljer mod databasen. Vi antager simpelthen, at de indsendte detaljer er ok og indstiller sessionsdataene.
  • public function dashboard() {...} indlæser dashboard-siden efter at have kaldt $this->check_auth('dashboard'); som bekræfter, at den loggede_ind-sessionsnøgle er indstillet.
  • public function settings() {...} indlæser indstillingssiden, som også er beskyttet
  • public function logout() {...} ødelægger sessionsdataene og logger brugeren ud. Metoden omdirigerer også til login-siden

CodeIgniter-sessionsvisninger

Opret følgende visninger i applikation/visninger/sessioner

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

Tilføj følgende kode til 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>

HER,

session->userdata('brugernavn');?> viser brugernavnet, som vi indstillede i godkendelsesmetoden

Tilføj følgende kode til 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>

HER,

Loginformularen sendes for at godkende rute.

Tilføj følgende kode til 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 er det for vores synspunkter. Lad os nu teste vores applikation.

I denne vejledning bruger vi den indbyggede PHP-webserver, men du kan bruge enhver webserver, der understøtter PHP.

Åbn terminalen

Kør følgende kommando

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

HER,

Ovenstående kommando browser til programkodebiblioteket og starter den indbyggede server på port 3000.

Bemærk: applikationsstien skal matche stien, hvor du downloadede CodeIgniter, og du kan bruge et hvilket som helst portnummer, der er gratis på din computer. Det er ikke nødvendigt at bruge port 3000.

Åbn følgende URL i din webbrowser: http://localhost:3000/dashboard

du vil blive omdirigeret til den følgende side

CodeIgniter-sessionsvisninger

Klik på knappen Log ind

Du vil se følgende resultater

CodeIgniter-sessionsvisninger

Efter at vi har logget ind, kan vi nu se sessionsdataene.

Resumé

I denne tutorial har du lært det grundlæggende i CodeIgniter-sessionsbiblioteket og lært, hvordan du bruger det til at gemme tidsmæssige data som flash-beskeder, og hvordan du bruger lagre mere permanente data, dvs. brugerlogindata.