Istunnon asettaminen sisään CodeSytytin esimerkin kanssa
⚡ Älykäs yhteenveto
CodeIgniter Session Management tallentaa käyttäjätietoja tilattomien HTTP-pyyntöjen kautta, jolloin sovellus muistaa kirjautuneen käyttäjän, ostoskorin tuotteet tai kertaluonteiset flash-viestit. Tässä esimerkissä luodaan flash-viestit ja simuloitu kirjautuminen käyttämällä CodeIgniter-istuntokirjasto.
CodeSytyttimen istuntojen hallinta
Jos olet aiemmin kehittänyt työpöytäsovelluksia, tiedät luultavasti, että voit määritellä globaalin muuttujan, antaa sille arvon ja käyttää sitä koko sovelluksen elinkaaren ajan. Useamman kuin yhden lomakkeen avaaminen ja sulkeminen tuo jokaiselle pyynnölle pääsyn globaaliin muuttujaan.
Toisin sanoen sovelluksen tila säilyy. Eli jos kirjautumisen yhteydessä asetit yrityksen nimen globaaliksi muuttujaksi, yrityksen nimen tila säilyy myös kirjautumislomakkeen sulkemisen jälkeen.
HTTP toimii hieman eri tavalla kuin juuri kuvailemamme skenaarion mukaisesti. Se on tilaton. Toisin sanoen yhdessä pyynnössä tekemäsi muutokset eivät säily seuraavassa pyynnössä.
Tämän ongelman kiertämiseksi PHP:ssä on kaksi (2) ratkaisua. Voimme joko työskennellä evästeiden, jotka ovat käyttäjän tietokoneelle tallennettuja pieniä tiedostoja, tai istuntojen, kanssa, jotka ovat evästeiden kaltaisia, mutta tallennetaan palvelimelle ja joiden kapasiteetti on suurempi kuin evästeillä.
Milloin istuntoja käytetään?
Istunnoista on yleensä hyötyä, kun haluat tietää käyttäjän toiminnan sivulta toiselle. Oletetaan esimerkiksi, että verkkosivustolla on suojattu alue. Käyttäjien ei tarvitse kirjautua sisään jokaisella sivulla. Voit antaa käyttäjän kirjautua sisään kerran ja tallentaa tietonsa istuntomuuttujaan, ja käyttää sitten samoja tietoja uudelleen tulevissa pyynnöissä. Muita käyttötapauksia ovat esimerkiksi verkkokaupan työstäminen.ping järjestelmään ja käyttäjän on lisättävä tuotteita kauppaanping koriin.
Vaihtoehtoisesti CodeIgniter käyttää myös istuntoja asettaakseen tiedot saataville vain kerran seuraavassa pyynnössä. Tästä on hyötyä, kun olet muokannut ja päivittänyt tietokantatietuetta ja haluat antaa käyttäjälle palautetta, 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 Codesytytin.
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 hakemisto istunnot sovelluksessa/näkymät
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 msg-avaimella varustetun istuntodatan arvon ja näyttää sen selaimessa.
Luodaan nyt reitit istunto-flash-metodillemme
Avaa application/config/routes.php
Lisää seuraavat rivit
$route['flash_index'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/flash_message';
Käynnistetään nyt sisäänrakennettu palvelin 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: sovelluksen polun on vastattava polkua, josta latasit tiedoston. CodeIgniter, ja voit käyttää mitä tahansa tietokoneellasi vapaana olevaa porttinumeroa. Portin 3000 käyttö ei ole välttämätöntä.
Lataa seuraavat URL verkkoselaimessasi: http://localhost:3000/flash_message
Sinut ohjataan seuraavaan URL, ja saat seuraavat tulokset: http://localhost:3000/flash_index
Napsauta selaimesi päivityspainiketta tai paina F5
Saat nyt seuraavat tulokset
Käyttäjätietojen tallentaminen CI-istuntoihin
Tarkastellaan nyt hieman edistyneempää esimerkkiä. Yksinkertaisuuden vuoksi simuloimme käyttäjän todennusta emmekä tee varsinaista toteutusta, jossa tarkistetaan käyttäjätietue tietokannassa ja annettu salasana.
Aloitetaanpa 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ää metodin, joka tarkistaa, onko käyttäjä kirjautunut sisään, ja sallii sitten pääsyn sivulle. Jos käyttäjä ei ole kirjautunut sisään, hänet ohjataan kirjautumissivulle flash-viestillä.
- public function login() {…} lataa istuntohakemistossa olevan 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 dashboard-sivun kutsuttuaan $this->check_auth('dashboard'); -funktiota, 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-istunnon katselukerrat
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:0 </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(3);?></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:0 </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata(1);?></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="password" 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 todennusreitille.
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:0 </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äpä kaikki näkökulmiemme osalta. 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: sovelluksen polun on vastattava polkua, josta latasit tiedoston. CodeIgniter, ja voit käyttää mitä tahansa tietokoneellasi vapaana olevaa porttinumeroa. Portin 3000 käyttö ei ole välttämätöntä.
Avaa seuraavat URL verkkoselaimessasi: http://localhost:3000/dashboard
Sinut ohjataan seuraavalle sivulle
Napsauta Kirjaudu-painiketta
Näet seuraavat tulokset
Kun olemme kirjautuneet sisään, voimme nyt nähdä istuntotiedot.





