Jak nastavit relaci CodeZapalovač s příkladem
⚡ Chytré shrnutí
CodeSpráva relací Igniter ukládá uživatelská data napříč bezstavovými HTTP požadavky, což umožňuje aplikaci pamatovat si přihlášeného uživatele, položky v košíku nebo jednorázové flash zprávy. Tento příklad vytváří flash zprávy a simulované přihlášení pomocí… CodeKnihovna relací Igniter.

CodeSpráva relací Igniter
Pokud jste již někdy vyvíjeli desktopové aplikace, pravděpodobně víte, že můžete definovat globální proměnnou, přiřadit jí hodnotu a používat ji po celou dobu životního cyklu aplikace. Při otevírání a zavírání více než jednoho formuláře bude mít každý požadavek přístup k této globální proměnné.
Jinými slovy, stav aplikace je zachován. To znamená, že pokud při přihlášení nastavíte název společnosti na globální proměnnou, pak se tento stav názvu společnosti zachová i po zavření přihlašovacího formuláře.
HTTP funguje trochu jinak než scénář, který jsme právě popsali. Je bezstavový. To znamená, že cokoli uděláte v jednom požadavku, se nezachová v dalším požadavku.
Abychom tento problém obešli, máme v PHP dvě (2) řešení. Můžeme buď pracovat s cookies, což jsou malé soubory umístěné v počítači uživatele, nebo s relacemi, které jsou podobné cookies, ale jsou uloženy na serveru a mají větší kapacitu než cookies.
Kdy použít relace?
Relace jsou obvykle užitečné, když chcete znát aktivity uživatelů na jednotlivých stránkách. Řekněme například, že máte na webu chráněnou oblast. Uživatelé se nemusí přihlašovat na každé stránce. Můžete nechat uživatele přihlásit se jednou a uložit jeho údaje do proměnné relace a poté stejná data znovu použít při dalších požadavcích. Další případy použití zahrnují práci v obchodě.ping systém a uživatel musí přidávat položky do obchoduping vozík.
Alternativně, CodeIgniter také používá relace k zpřístupnění dat pouze jednou při dalším požadavku. To je užitečné, když jste upravili a aktualizovali záznam v databázi a chcete uživateli vrátit zpětnou vazbu, když je přesměrován na jinou stránku.
Odesílání zpráv Flash na jiné stránky pomocí CI Sessions
V této části se dozvíte o odesílání flash zpráv na jiné stránky pomocí knihovny relací v CodeZapalovač.
Vytvořte nový soubor SessionController v
application/controllers/SessionController.php
Přidejte následující kód
<?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')); } }
TADY,
- třída SessionController rozšiřuje CI_Controller {…} definuje třídu SessionController a rozšiřuje nadřazenou třídu kontroleru.
- veřejná funkce __construct() {…} definuje metodu konstruktoru, která inicializuje nadřazenou třídu a načte pomocnou adresu URL a knihovnu relace.
- public function index() {…} definuje metodu indexu relace, která načte zobrazení indexu relace.
- veřejná funkce flash_message(){…} definuje metodu flash zprávy, která nastaví flash data a poté přesměruje na cestu flash_index
Nyní si vytvořme pohled, který bude zobrazovat hodnotu dat relace.
Vytvořte nový adresář sessions v application/views
Vytvořte nový soubor index.php v application/views/sessions
Přidejte následující kód
<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>
TADY,
session->userdata('msg');?> načte hodnotu dat relace s klíčem msg a zobrazí ji v prohlížeči.
Nyní si vytvořme trasy pro naši metodu flash session.
Otevřete application/config/routes.php
Přidejte následující řádky
$route['flash_index'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/flash_message';
Nyní spustíme vestavěný server pro PHP a otestujte naše bleskové zprávy
Otevřete terminál
Spusťte následující příkaz
cd C:\Sites\ci-app php -S localhost:3000
TADY,
Výše uvedený příkaz projde adresář s kódem aplikace a spustí vestavěný server na portu 3000.
Poznámka: Cesta k aplikaci se musí shodovat s cestou, kam jste ji stáhli CodeIgniter a můžete použít libovolné číslo portu, které je na vašem počítači volné. Není nutné používat port 3000.
Načtěte následující URL ve vašem webovém prohlížeči: http://localhost:3000/flash_message
Budete přesměrováni na následující URLa získáte následující výsledky: http://localhost:3000/flash_index
Klikněte na tlačítko pro obnovení ve webovém prohlížeči nebo stiskněte klávesu F5
Nyní získáte následující výsledky
Ukládání uživatelských dat v CI Sessions
Podívejme se nyní na trochu pokročilejší příklad. Pro zjednodušení budeme simulovat ověřování uživatele a nebudeme provádět samotnou implementaci ověřování záznamu uživatele v databázi a zadaného hesla.
Začněme s trasami
Otevřete routes.php umístěný v application/config
Přidejte následující trasy
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
TADY,
- $route['login'] = 'controller/login'; definuje cestu, která zobrazí přihlašovací formulář
- $route['authenticate'] = 'kontrolér relace/autentizace'; definuje cestu, která simuluje úspěšné přihlášení uživatele a nastavuje přihlašovací údaje relace.
- $route['settings'] = 'regulátor relace/nastavení'; definuje chráněnou stránku, která by měla být přístupná pouze přihlášeným uživatelům
- $route['dashboard'] = 'controller/dashboard'; definuje chráněnou stránku, která by měla být přístupná pouze přihlášeným uživatelům.
- $route['logout'] = 'kontrolér relace/odhlášení'; odhlásí uživatele zničením dat relace
Nyní aktualizujme SessionController.
Otevřete application/controllers/SessionController.php
Přidejte následující metody
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')); }
TADY,
- Veřejná funkce check_auth($page) {…} definuje metodu, která kontroluje, zda je uživatel přihlášen, a poté povoluje přístup ke stránce. Pokud uživatel přihlášen není, je přesměrován na přihlašovací stránku s bleskovou zprávou.
- public function login() {…} načte přihlašovací zobrazení umístěné v adresáři sessions.
- public function authenticate() {…} nastavuje uživatelská data relace pro klíče login_in a username. POZNÁMKA: Neověřujeme žádné přihlašovací údaje vůči databázi. Jednoduše předpokládáme, že odeslané údaje jsou v pořádku a nastavíme data relace.
- public function dashboard() {…} načte stránku dashboardu po volání $this->check_auth('dashboard');, která ověří, zda je nastaven klíč relace logged_in.
- public function settings() {…} načte stránku nastavení, která je také chráněna
- public function logout() {…} zničí data relace a odhlásí uživatele. Metoda také přesměruje na přihlašovací stránku
CodeZobrazení relace Igniter
Vytvořte následující pohledy v aplikaci/pohledech/relacích
- dashboard.php
- login.php
- Settings.php
Přidejte následující kód do souboru 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: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>
TADY,
session->userdata('username');?> zobrazí uživatelské jméno, které jsme nastavili v autentizační metodě
Přidejte následující kód do 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>
TADY,
Přihlašovací formulář se odešle na autentizační trasu.
Přidejte následující kód do 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>
To je vše, co se týče našich názorů. Nyní si otestujme naši aplikaci.
V tomto tutoriálu používáme vestavěný webový server PHP, ale můžete použít jakýkoli webový server, který podporuje PHP.
Otevřete terminál
Spusťte následující příkaz
cd C:\Sites\ci-app php -S localhost:3000
TADY,
Výše uvedený příkaz projde adresář s kódem aplikace a spustí vestavěný server na portu 3000.
Poznámka: Cesta k aplikaci se musí shodovat s cestou, kam jste ji stáhli CodeIgniter a můžete použít libovolné číslo portu, které je na vašem počítači volné. Není nutné používat port 3000.
Otevřete následující URL ve vašem webovém prohlížeči: http://localhost:3000/dashboard
Budete přesměrováni na následující stránku
Klikněte na tlačítko Přihlásit
Uvidíte následující výsledky
Po přihlášení jsme nyní schopni vidět data relace.




