Sessie instellen in Codeigniter met voorbeeld
CodeIgniter-sessiebeheer
Als u al eerder desktopapplicaties heeft ontwikkeld, weet u waarschijnlijk dat u een globale variabele kunt definiëren, er een waarde aan kunt toekennen en deze kunt gebruiken gedurende de levenscyclus van de applicatie, waarbij u meer dan één (1) opent en sluit en elk verzoek toegang heeft tot de globale variabele.
Met andere woorden: de status van de applicatie blijft behouden. Dat wil zeggen dat als u bij het inloggen de bedrijfsnaam instelt op een globale variabele, zelfs nadat u het inlogformulier sluit, blijft die status van de bedrijfsnaam behouden.
HTTP werkt iets anders dan het bovenstaande scenario dat we zojuist hebben beschreven. Het is staatloos. Dat wil zeggen dat wat u ook doet in het ene verzoek, niet volhardt in het volgende verzoek. T
o dit probleem omzeilen. We hebben twee (2) oplossingen in PHP. We kunnen werken met cookies, kleine bestanden die op de computer van de gebruiker worden geplaatst, of met sessies die vergelijkbaar zijn met cookies, maar in plaats daarvan op de server worden opgeslagen en een grotere capaciteit hebben dan cookies.
Wanneer sessies gebruiken?
Sessies zijn meestal handig als u de activiteiten van de gebruiker van pagina tot pagina wilt weten. Stel bijvoorbeeld dat u een beveiligd gebied op de website hebt. De gebruikers hoeven dan niet op elke pagina in te loggen. U kunt de gebruiker één keer laten inloggen en hun gegevens opslaan in een sessievariabele en vervolgens dezelfde gegevens opnieuw gebruiken bij verdere verzoeken. Andere use cases zijn wanneer u werkt op een winkelsysteem en de gebruiker artikelen aan het winkelwagentje moet toevoegen.
Als alternatief gebruikt CodeIgniter ook sessies om gegevens slechts één keer beschikbaar te stellen bij de volgende aanvraag. Dit is handig als u een databaserecord moet bewerken en bijwerken, en u feedback wilt geven aan de gebruiker wanneer deze naar een andere pagina wordt doorgestuurd.
Flash-berichten naar andere pagina's verzenden met CI-sessies
In dit gedeelte leert u hoe u Flash-berichten naar andere pagina's kunt verzenden met behulp van de sessiebibliotheek in CodeIgniter
Maak een nieuw bestand SessionController in
application/controllers/SessionController.php
Voeg de volgende code toe
<?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')); } }
HIER,
- class SessionController breidt CI_Controller uit {…} definieert de SessionController-klasse en breidt de bovenliggende controllerklasse uit.
- public function __construct() {…} definieert de constructormethode die de bovenliggende klasse initialiseert en de url-helper en sessiebibliotheek laadt.
- public function index() {…} definieert de sessie-indexmethode die de sessie-indexweergave laadt.
- public function flash_message(){…} definieert de flash-berichtmethode die de flash-gegevens instelt en vervolgens doorverwijst naar de flash_index-route
Laten we nu de weergave maken waarin de waarde van de sessiegegevens wordt weergegeven.
Maak een nieuwe directorysessie in application/views
Maak een nieuw bestand index.php in application/views/sessions
Voeg de volgende code toe
<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>
HIER,
session->userdata('msg');?> haalt de waarde van de sessiegegevens op met de sleutel van msg en geeft deze weer in de browser.
Laten we nu de routes maken voor onze sessie-flash-methode
Open applicatie/config/routes.php
Voeg de volgende regels toe
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
Laten we nu de ingebouwde server starten PHP en test onze flashberichten
Open de terminal
Voer de volgende opdracht uit
cd C:\Sites\ci-app php -S localhost:3000
HIER,
Met de bovenstaande opdracht bladert u naar de map met toepassingscodes en start u de ingebouwde server op poort 3000.
Let op: het applicatiepad moet overeenkomen met het pad waar u CodeIgniter hebt gedownload, en u kunt elk poortnummer gebruiken dat vrij is op uw computer. Het is niet nodig om poort 3000 te gebruiken.
Laad de volgende URL in uw webbrowser: http://localhost:3000/flash_message
U wordt doorgestuurd naar de volgende URL en krijgt de volgende resultaten: http://localhost:3000/flash_index
Klik op de vernieuwingsknop van uw webbrowser of druk op F5
U krijgt nu de volgende resultaten
Gebruikersgegevens opslaan in CI-sessies
Laten we nu naar een iets geavanceerder voorbeeld kijken. Om het eenvoudig te maken, zullen we gebruikersauthenticatie simuleren en niet de daadwerkelijke implementatie uitvoeren van het verifiëren van het gebruikersrecord in de database en het ingediende wachtwoord.
Laten we beginnen met de routes
Open routes.php in application/config
Voeg de volgende routes toe
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
HIER,
- $route['login'] = 'sessiecontroller/login'; definieert de route die het inlogformulier weergeeft
- $route['authenticate'] = 'sessiecontroller/authenticeren'; definieert de route die succesvolle gebruikersaanmelding simuleert en stelt de aanmeldingsgegevens van de sessie in.
- $route['settings'] = 'sessiecontroller/instellingen'; definieert een beveiligde pagina die alleen toegankelijk mag zijn voor ingelogde gebruikers
- $route['dashboard'] = 'sessiecontroller/dashboard'; definieert een beveiligde pagina die alleen toegankelijk mag zijn voor ingelogde gebruikers.
- $route['uitloggen'] = 'sessiecontroller/uitloggen'; logt de gebruiker uit door de sessiegegevens te vernietigen
Laten we nu de SessionController bijwerken
Open applicatie/controllers/SessionController.php
Voeg de volgende methoden toe
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')); }
HIER,
- public function check_auth($page) {…} definieert de methode die controleert of de gebruiker is ingelogd en vervolgens toegang tot de pagina toestaat. Als een gebruiker niet is ingelogd, wordt de gebruiker met een flashbericht doorgestuurd naar de inlogpagina.
- public function login() {…} laadt de inlogweergave in de sessiemap.
- public function authenticate() {…} stelt de sessiegebruikersgegevens in voor de sleutels signed_in en username. OPMERKING: We verifiëren geen inloggegevens met de database. We gaan er gewoon vanuit dat de ingediende gegevens in orde zijn en stellen de sessiegegevens in.
- public function dashboard() {…} laadt de dashboardpagina na het aanroepen van $this->check_auth('dashboard'); waarmee wordt gecontroleerd of de ingelogde sessiesleutel is ingesteld.
- public function settings() {…} laadt de instellingenpagina die ook beveiligd is
- public function logout() {…} vernietigt de sessiegegevens en logt de gebruiker uit. De methode leidt ook door naar de inlogpagina
CodeIgniter-sessieweergaven
Maak de volgende weergaven in application/views/sessions
- dashboard.php
- inloggen.php
- settings.php
Voeg de volgende code toe aan 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>
HIER,
session->userdata('username');?> geeft de gebruikersnaam weer die we hebben ingesteld in de authenticatiemethode
Voeg de volgende code toe aan 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>
HIER,
Het inlogformulier wordt verzonden om de route te verifiëren.
Voeg de volgende code toe aan 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>
Dat was het voor onze opvattingen. Laten we nu onze applicatie testen.
In deze tutorial gebruiken we de ingebouwde PHP-webserver, maar u kunt elke webserver gebruiken die PHP ondersteunt.
Open de terminal
Voer de volgende opdracht uit
cd C:\Sites\ci-app php -S localhost:3000
HIER,
Met de bovenstaande opdracht bladert u naar de map met toepassingscodes en start u de ingebouwde server op poort 3000.
Let op: het applicatiepad moet overeenkomen met het pad waar u CodeIgniter hebt gedownload, en u kunt elk poortnummer gebruiken dat vrij is op uw computer. Het is niet nodig om poort 3000 te gebruiken.
Open de volgende URL in uw webbrowser: http://localhost:3000/dashboard
U wordt doorgestuurd naar de volgende pagina
Klik op de knop Inloggen
U zult de volgende resultaten zien
Nadat we zijn ingelogd, kunnen we nu de sessiegegevens zien.
Samenvatting
In deze tutorial hebt u de basisbeginselen van de CodeIgniter-sessiebibliotheek geleerd en geleerd hoe u deze kunt gebruiken om tijdelijke gegevens op te slaan als flash-berichten en hoe u meer permanente gegevens kunt opslaan, dat wil zeggen gebruikersaanmeldingsgegevens.