Kako postaviti sesiju u Codeigniter s primjerom

CodeIgniter upravljanje sesijom

Ako ste prije toga razvili aplikacije za stolna računala, vjerojatno znate da možete definirati globalnu varijablu, dodijeliti joj vrijednost i koristiti je tijekom životnog ciklusa aplikacije otvarajući i zatvarajući više od jedne (1) i svaki će zahtjev imati pristup globalna varijabla.

Drugim riječima, stanje aplikacije se održava. Drugim riječima, ako ste prilikom prijave postavili naziv tvrtke na globalnu varijablu, čak i nakon što zatvorite obrazac za prijavu, to stanje naziva tvrtke ostaje sačuvano.

HTTP radi malo drugačije od gornjeg scenarija koji smo upravo opisali. To je apatrid. To znači da kažete da što god učinite u jednom zahtjevu neće ustrajati u sljedećem zahtjevu. T

o zaobići ovaj problem. Imamo dva (2) rješenja u PHP-u. Možemo raditi s kolačićima koji su male datoteke smještene na korisnikovo računalo ili raditi sa sesijama koje su slične kolačićima, ali su umjesto toga pohranjene na poslužitelju i imaju veći kapacitet od kolačića.

Kada koristiti sesije?

Sesije su obično korisne kada želite znati aktivnosti korisnika od stranice do stranice. Na primjer, recimo da imate zaštićeno područje na web stranici. Korisnici se ne moraju prijavljivati ​​na svaku stranicu. Možete dopustiti korisniku da se prijavi jednom i pohraniti njegove podatke u varijablu sesije, a zatim ponovno koristiti iste podatke za daljnje zahtjeve. Ostali slučajevi upotrebe uključuju rad na sustavu za kupnju i korisnik mora dodati stavke u košaricu za kupnju.

Alternativno, CodeIgniter također koristi sesije kako bi podaci bili dostupni samo jednom na sljedećem zahtjevu. Ovo je korisno jer možete uređivati ​​i ažurirati zapis baze podataka i želite vratiti povratne informacije korisniku kada je preusmjeren na drugu stranicu.

Slanje Flash poruka drugim stranicama s CI sesijama

U ovom odjeljku naučit ćete o slanju flash poruka drugim stranicama pomoću knjižnice sesije u CodeIgniter

Stvorite novu datoteku SessionController u

application/controllers/SessionController.php

Dodajte sljedeći 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'));
    }
}

OVDJE,

  • klasa SessionController extends CI_Controller {…} definira klasu SessionController i proširuje roditeljsku klasu kontrolera.
  • javna funkcija __construct() {…} definira metodu konstruktora koja inicijalizira nadređenu klasu i učitava url helper i biblioteku sesije.
  • javna funkcija index() {…} definira metodu indeksa sesije koja učitava prikaz indeksa sesije.
  • javna funkcija flash_message(){…} definira metodu flash poruke koja postavlja flash podatke i zatim preusmjerava na rutu flash_index

Kreirajmo sada prikaz koji će prikazati vrijednost podataka o sesiji.

Stvorite novu sesiju imenika u aplikaciji/prikazima

Napravite novu datoteku index.php u aplikaciji/pregledi/sesije

Dodajte sljedeći 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>

OVDJE,

session->userdata('msg');?> dohvaća vrijednost podataka o sesiji s ključem poruke i prikazuje je u pregledniku.

Kreirajmo sada rute za našu flash metodu sesije

Otvorite application/config/routes.php

Dodajte sljedeće retke

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

Pokrenimo sada ugrađeni poslužitelj za PHP i testirajte naše blic poruke

Otvorite terminal

Pokrenite sljedeću naredbu

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

OVDJE,

Gornja naredba pregledava direktorij koda aplikacije i pokreće ugrađeni poslužitelj na portu 3000.

Napomena: put aplikacije mora odgovarati putu na koji ste preuzeli CodeIgniter, a možete koristiti bilo koji broj priključka koji je slobodan na vašem računalu. Nije potrebno koristiti port 3000.

Učitajte sljedeći URL u svoj web preglednik: http://localhost:3000/flash_message

Bit ćete preusmjereni na sljedeći URL i dobit ćete sljedeće rezultate: http://localhost:3000/flash_index

Slanje Flash poruka drugim stranicama

Pritisnite tipku za osvježavanje vašeg web preglednika ili pritisnite F5

Sada ćete dobiti sljedeće rezultate

Slanje Flash poruka drugim stranicama

Pohranjivanje korisničkih podataka u CI sesijama

Pogledajmo sada malo napredniji primjer. Kako bismo to pojednostavili, simulirati ćemo autentifikaciju korisnika, a ne provoditi stvarnu implementaciju provjere korisničkog zapisa u bazi podataka i poslane lozinke.

Počnimo s rutama

Otvorite routes.php koji se nalazi u aplikaciji/konfig

Dodajte sljedeće rute

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

OVDJE,

  • $route['login'] = 'kontroler sesije/prijava'; definira rutu koja prikazuje obrazac za prijavu
  • $route['authenticate'] = 'kontroler sesije/autentifikacija'; definira rutu koja simulira uspješnu prijavu korisnika i postavlja podatke za prijavu sesije.
  • $route['settings'] = 'sessioncontroller/settings'; definira zaštićenu stranicu koja bi trebala biti dostupna samo prijavljenim korisnicima
  • $route['dashboard'] = 'sessioncontroller/dashboard'; definira zaštićenu stranicu koja bi trebala biti dostupna samo prijavljenim korisnicima.
  • $route['logout'] = 'kontroler sesije/odjava'; odjavljuje korisnika uništavanjem podataka o sesiji

Hajdemo sada ažurirati SessionController

Otvorite application/controllers/SessionController.php

Dodajte sljedeće 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'));
    }

OVDJE,

  • javna funkcija check_auth($page) {…} definira metodu koja provjerava je li korisnik prijavljen i zatim dopušta pristup stranici. Ako korisnik nije prijavljen, korisnik se brzom porukom preusmjerava na stranicu za prijavu.
  • javna funkcija login() {…} učitava prikaz prijave koji se nalazi u direktoriju sesija.
  • javna funkcija authenticate() {…} postavlja korisničke podatke sesije za ključeve logged_in i korisničko ime. NAPOMENA: Ne provjeravamo podatke za prijavu u bazi podataka. Jednostavno pretpostavljamo da su poslani detalji u redu i postavljamo podatke o sesiji.
  • javna funkcija dashboard() {…} učitava stranicu nadzorne ploče nakon poziva $this->check_auth('dashboard'); koji provjerava da je ključ sesije logged_in postavljen.
  • public function settings() {…} učitava stranicu postavki koja je također zaštićena
  • javna funkcija logout() {…} uništava podatke o sesiji i odjavljuje korisnika. Metoda također preusmjerava na stranicu za prijavu

CodeIgniter prikazi sesije

Stvorite sljedeće poglede u aplikaciji/pregledima/sesijama

  • nadzorna ploča.php
  • prijava.php
  • postavke.php

Dodajte sljedeći kod u 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>

OVDJE,

session->userdata('username');?> prikazuje korisničko ime koje smo postavili u metodi provjere autentičnosti

Dodajte sljedeći kod u 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>

OVDJE,

Obrazac za prijavu podnosi se za autentifikaciju rute.

Dodajte sljedeći kod u 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>

To je to za naše poglede. Testirajmo sada našu aplikaciju.

U ovom vodiču koristimo ugrađeni PHP web poslužitelj, ali možete koristiti bilo koji web poslužitelj koji podržava PHP.

Otvorite terminal

Pokrenite sljedeću naredbu

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

OVDJE,

Gornja naredba pregledava direktorij koda aplikacije i pokreće ugrađeni poslužitelj na portu 3000.

Napomena: put aplikacije mora odgovarati putu na koji ste preuzeli CodeIgniter, a možete koristiti bilo koji broj priključka koji je slobodan na vašem računalu. Nije potrebno koristiti port 3000.

Otvorite sljedeći URL u svom web pregledniku: http://localhost:3000/dashboard

bit ćete preusmjereni na sljedeću stranicu

CodeIgniter prikazi sesije

Kliknite na gumb Prijava

Vidjet ćete sljedeće rezultate

CodeIgniter prikazi sesije

Nakon što se prijavimo, sada možemo vidjeti podatke o sesiji.

rezime

U ovom ste vodiču naučili osnove biblioteke sesija CodeIgniter i naučili kako je koristiti za pohranjivanje privremenih podataka kao flash poruka i kako koristiti pohranjivanje trajnijih podataka, tj. podataka za prijavu korisnika.