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.

  • 🌐 Proč sezení: HTTP je bezstavový protokol, takže relace uchovávají uživatelská data, jako je stav přihlášení, napříč jednotlivými požadavky na stránky na serveru.
  • 🍪 Soubory cookie vs. relace: Soubory cookie ukládají malá data na počítači uživatele, zatímco relace ukládají větší data na serveru a jsou bezpečnější pro citlivé hodnoty.
  • 💨 Data flash: Funkce set_flashdata() ukládá zprávu dostupnou pouze při dalším požadavku, což je ideální pro jednorázovou zpětnou vazbu po přesměrování.
  • 🔑 Uživatelská data: Funkce set_userdata() uchovává hodnoty jako username a logged_in po celou dobu relace a funkce unset_userdata() je při odhlášení vymaže.
  • 🛡️ Řízení přístupu: Znovupoužitelná metoda check_auth() přesměruje návštěvníky na přihlašovací stránku vždy, když chybí klíč relace logged_in.
  • 🧪 Pracovní příklad: Výukový program propojuje trasy vodičů, kontroler a zobrazení ve stylu Bulma pro demonstraci toků flashových i persistentních relací.
  • 🤖 AI Assist: Nástroje umělé inteligence dokáží vytvářet řadiče relací, generovat mapy tras a označovat nezabezpečené zpracování relací před nasazením.

CodeSpráva 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

Odesílání Flash zpráv na jiné stránky

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

Odesílání Flash zpráv na jiné stránky

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

CodeZobrazení relace Igniter

Klikněte na tlačítko Přihlásit

Uvidíte následující výsledky

CodeZobrazení relace Igniter

Po přihlášení jsme nyní schopni vidět data relace.

Nejčastější dotazy

Uživatelská data přetrvávají po celou dobu relace, dokud je nezrušíte nebo dokud relace nevyprší. Flashdata jsou dočasná hodnota, která přežije pouze další požadavek a poté se automaticky odstraní, což je vhodné pro jednorázové zprávy.

Dočasná data jsou data relace s nastavenou dobou platnosti. Voláte mark_as_temp() nebo set_tempdata() s životností v sekundách, po které… CodeIgniter hodnotu automaticky odstraní, i když je relace stále aktivní.

Ve výchozím nastavení CodeIgniter ukládá relace pomocí souborů na serveru. Pokud potřebujete sdílené úložiště napříč více servery, můžete v konfiguračním souboru přepnout ovladač na databázi, Redis nebo Memcached.

Ano. Umělá inteligence může zkontrolovat konfiguraci vaší relace a zjistit, zda neobsahuje slabá nastavení, doporučit regeneraci ID relace po přihlášení, povolení šifrování souborů cookie a používání souborů cookie pouze s protokolem HTTPS ke snížení rizika únosu relace.

Ano. Z krátkého popisu vyplývá, že umělá inteligence dokáže vytvořit trasy, řadič relací a chráněné zobrazení. Vždy přidávejte skutečné ověření databáze a hashování hesel, protože scaffoldy umělé inteligence často používají simulované kontroly.

Shrňte tento příspěvek takto: