Kuinka asettaa istunto Codeigniterissä esimerkin avulla

CodeIgniter-istunnonhallinta

Jos olet kehittänyt työpöytäsovelluksia aiemmin, tiedät luultavasti, että voit määrittää globaalin muuttujan, antaa sille arvon ja käyttää sitä koko sovelluksen elinkaaren aikana, kun sovellus avautuu ja sulkee useamman kuin yhden (1), ja jokaisella pyynnöllä on pääsy globaali muuttuja.

Toisin sanoen sovelluksen tila säilyy. Eli jos kirjautuessasi asetat yrityksen nimeksi globaalin muuttujan, yrityksen nimen tila säilyy myös kirjautumislomakkeen sulkemisen jälkeen.

HTTP toimii hieman eri tavalla kuin yllä kuvattu skenaario. Se on valtioton. Eli mitä tahansa teet yhdessä pyynnössä, se ei kestä seuraavaa pyyntöä. T

o kiertää tämä ongelma. Meillä on kaksi (2) ratkaisua PHP:ssä. Voimme joko työskennellä evästeiden kanssa, jotka ovat pieniä tiedostoja, jotka on sijoitettu käyttäjän tietokoneelle, tai istuntojen kanssa, jotka ovat samanlaisia ​​kuin evästeet, mutta jotka sen sijaan tallennetaan palvelimelle ja joiden kapasiteetti on suurempi kuin evästeillä.

Milloin istuntoja käytetään?

Istunnot ovat yleensä hyödyllisiä, kun haluat tietää käyttäjän toiminnasta sivulta toiselle. Oletetaan esimerkiksi, että verkkosivustollasi on suojattu alue. Käyttäjien ei tarvitse kirjautua sisään jokaiselle sivulle. Voit antaa käyttäjän kirjautua sisään kerran ja tallentaa tietonsa istuntomuuttujaan ja käyttää sitten samoja tietoja uudelleen myöhemmissä pyynnöissä. Muita käyttötapauksia ovat esimerkiksi ostosjärjestelmän parissa työskenteleminen ja käyttäjän on lisättävä tuotteita ostoskoriin.

Vaihtoehtoisesti CodeIgniter käyttää istuntoja myös saadakseen tiedot saataville vain kerran seuraavassa pyynnössä. Tämä on hyödyllistä, jos olet saattanut muokata ja päivittää tietokantatietuetta, ja haluat antaa palautetta käyttäjälle, kun hänet ohjataan toiselle sivulle.

Flash-viestien lähettäminen muille sivuille CI-istunnoilla

Tässä osiossa opit lähettämään flash-viestejä muille sivuille istuntokirjaston avulla CodeIgniter

Luo uusi tiedosto SessionController sisään

application/controllers/SessionController.php

Lisää seuraava koodi

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

TÄSSÄ,

  • luokka SessionController laajentaa CI_Controller {…} määrittää SessionController-luokan ja laajentaa pääohjainluokkaa.
  • public function __construct() {…} määrittää konstruktorimenetelmän, joka alustaa emoluokan ja lataa url-apuohjelman ja istuntokirjaston.
  • public function index() {…} määrittää istuntoindeksimenetelmän, joka lataa istuntoindeksinäkymän.
  • julkinen funktio flash_message(){…} määrittää flash-viestimenetelmän, joka asettaa flash-tiedot ja ohjaa sitten flash_index-reitille

Luodaan nyt näkymä, joka näyttää istuntotietojen arvon.

Luo uusi hakemistoistunto sovelluksessa/näkymissä

Luo uusi tiedosto index.php kohtaan application/views/sessions

Lisää seuraava koodi

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

TÄSSÄ,

session->userdata('msg');?> hakee istuntotietojen arvon msg-näppäimellä ja näyttää sen selaimessa.

Luodaan nyt reitit session flash -menetelmällemme

Avaa application/config/routes.php

Lisää seuraavat rivit

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

Aloitetaan nyt sisäänrakennettu palvelin verkkotunnukselle PHP ja testaa flash-viestejämme

Avaa terminaali

Suorita seuraava komento

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

TÄSSÄ,

Yllä oleva komento selaa sovelluskoodihakemistoon ja käynnistää sisäänrakennetun palvelimen portissa 3000.

Huomautus: sovelluspolun on vastattava polkua, jolla latasit CodeIgniterin, ja voit käyttää mitä tahansa tietokoneessasi olevaa vapaata porttinumeroa. Porttia 3000 ei tarvitse käyttää.

Lataa seuraava URL-osoite verkkoselaimeen: http://localhost:3000/flash_message

Sinut ohjataan seuraavaan URL-osoitteeseen, ja saat seuraavat tulokset: http://localhost:3000/flash_index

Flash-viestien lähettäminen muille sivuille

Napsauta selaimesi päivityspainiketta tai paina F5

Saat nyt seuraavat tulokset

Flash-viestien lähettäminen muille sivuille

Käyttäjätietojen tallentaminen CI-istuntoihin

Katsotaanpa nyt hieman edistyneempää esimerkkiä. Sen yksinkertaistamiseksi simuloimme käyttäjän todennusta, emmekä tee varsinaista tietokannan käyttäjätietueen ja lähetetyn salasanan tarkistamista.

Aloitetaan reiteistä

Avaa routes.php, joka sijaitsee sovelluksessa/config

Lisää seuraavat reitit

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

TÄSSÄ,

  • $route['login'] = 'istunnonohjain/kirjautuminen'; määrittää reitin, joka näyttää kirjautumislomakkeen
  • $route['authenticate'] = 'istunnonohjain/todennus'; määrittää reitin, joka simuloi onnistunutta käyttäjän kirjautumista ja asettaa istunnon kirjautumistiedot.
  • $route['settings'] = 'istunnonohjain/asetukset'; määrittää suojatun sivun, jonka pitäisi olla vain kirjautuneiden käyttäjien käytettävissä
  • $route['dashboard'] = 'sessioncontroller/dashboard'; määrittää suojatun sivun, jonka pitäisi olla vain kirjautuneiden käyttäjien käytettävissä.
  • $route['logout'] = 'sessioncontroller/logout'; kirjaa käyttäjän ulos tuhoamalla istuntotiedot

Päivitetään nyt SessionController

Avaa application/controllers/SessionController.php

Lisää seuraavat menetelmät

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

TÄSSÄ,

  • public function check_auth($page) {…} määrittää menetelmän, joka tarkistaa, onko käyttäjä kirjautunut ja sallii pääsyn sivulle. Jos käyttäjä ei ole kirjautunut sisään, käyttäjä ohjataan sisäänkirjautumissivulle flash-viestillä.
  • public function login() {…} lataa istuntohakemistossa sijaitsevan kirjautumisnäkymän.
  • public function authenticate() {…} asettaa istunnon käyttäjätiedot avaimille logged_in ja username. HUOMAA: Emme tarkista kirjautumistietoja tietokantaan. Oletamme yksinkertaisesti, että lähetetyt tiedot ovat kunnossa ja asetamme istuntotiedot.
  • public function dashboard() {…} lataa kojelautasivun kutsuttuaan $this->check_auth('dashboard'); joka varmistaa, että logged_in istuntoavain on asetettu.
  • public function settings() {…} lataa asetussivun, joka on myös suojattu
  • public function logout() {…} tuhoaa istuntotiedot ja kirjaa käyttäjän ulos. Menetelmä ohjaa myös kirjautumissivulle

CodeIgniter-istuntonäkymät

Luo seuraavat näkymät sovelluksissa/näkymissä/istunnoissa

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

Lisää seuraava koodi dashboard.php:hen

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

TÄSSÄ,

session->userdata('username');?> näyttää käyttäjänimen, jonka määritimme todennusmenetelmässä

Lisää seuraava koodi osoitteeseen 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>

TÄSSÄ,

Kirjautumislomake lähetetään reitin todentamiseksi.

Lisää seuraava koodi tiedostoon 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>

Siinä se meidän näkemyksillemme. Testataan nyt sovellustamme.

Tässä opetusohjelmassa käytämme sisäänrakennettua PHP-verkkopalvelinta, mutta voit käyttää mitä tahansa PHP:tä tukevaa web-palvelinta.

Avaa terminaali

Suorita seuraava komento

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

TÄSSÄ,

Yllä oleva komento selaa sovelluskoodihakemistoon ja käynnistää sisäänrakennetun palvelimen portissa 3000.

Huomautus: sovelluspolun on vastattava polkua, jolla latasit CodeIgniterin, ja voit käyttää mitä tahansa tietokoneessasi olevaa vapaata porttinumeroa. Porttia 3000 ei tarvitse käyttää.

Avaa seuraava URL-osoite verkkoselaimessa: http://localhost:3000/dashboard

sinut ohjataan seuraavalle sivulle

CodeIgniter-istuntonäkymät

Napsauta Kirjaudu-painiketta

Näet seuraavat tulokset

CodeIgniter-istuntonäkymät

Kun olemme kirjautuneet sisään, voimme nyt nähdä istuntotiedot.

Yhteenveto

Tässä opetusohjelmassa olet oppinut CodeIgniter-istuntokirjaston perusteet ja oppinut käyttämään sitä ajallisten tietojen tallentamiseen flash-viesteinä ja kuinka tallentaa pysyvämpiä tietoja eli käyttäjän kirjautumistietoja.