Hur man ställer in sessionen CodeTändare med exempel
⚡ Smart sammanfattning
CodeIgniter Session Management lagrar användardata över tillståndslösa HTTP-förfrågningar, vilket gör att en applikation kan komma ihåg en inloggad användare, varukorgsartiklar eller engångs flashmeddelanden. Det här exemplet skapar flashmeddelanden och en simulerad inloggning med hjälp av CodeIgniter-sessionsbibliotek.
CodeHantering av Igniter-sessioner
Om du har utvecklat skrivbordsapplikationer tidigare vet du förmodligen att du kan definiera en global variabel, tilldela den ett värde och använda den under hela applikationens livscykel. När du öppnar och stänger mer än ett formulär kommer varje begäran att ha åtkomst till den globala variabeln.
Med andra ord bibehålls applikationens tillstånd. Det vill säga, om du angav företagsnamnet till en global variabel när du loggade in, så bevaras det tillståndet för företagsnamnet även efter att du stänger inloggningsformuläret.
HTTP fungerar lite annorlunda än scenariot vi just har beskrivit. Det är statslöst. Det vill säga, vad du än gör i en förfrågan sparas inte i nästa.
För att komma runt detta problem har vi två (2) lösningar i PHP. Vi kan antingen arbeta med cookies, som är små filer som placeras på användarens dator, eller arbeta med sessioner, som liknar cookies men istället lagras på servern och har större kapacitet än cookies.
När ska man använda sessioner?
Sessioner är oftast användbara när du vill veta användarens aktiviteter från sida till sida. Låt oss till exempel säga att du har ett skyddat område på webbplatsen. Användarna behöver inte logga in på varje sida. Du kan låta användaren logga in en gång och lagra deras uppgifter i en sessionsvariabel, och sedan återanvända samma data vid ytterligare förfrågningar. Andra användningsfall inkluderar när man arbetar i en butik.ping systemet och användaren måste lägga till varor i butikenping vagn.
Alternativt, CodeIgniter använder också sessioner för att göra data tillgängliga endast en gång vid nästa förfrågan. Detta är användbart när du har redigerat och uppdaterat en databaspost och vill ge feedback till användaren när de omdirigeras till en annan sida.
Skickar Flash-meddelanden till andra sidor med CI-sessioner
I det här avsnittet kommer du att lära dig hur du skickar flashmeddelanden till andra sidor med hjälp av sessionsbiblioteket i Codeigniter.
Skapa en ny fil SessionController i
application/controllers/SessionController.php
Lägg till följande kod
<?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')); } }
HÄR,
- class SessionController utökar CI_Controller {...} definierar SessionController-klassen och utökar den överordnade kontrollerklassen.
- public funktion __construct() {...} definierar konstruktormetoden som initierar den överordnade klassen, och laddar url-hjälpen och sessionsbiblioteket.
- public function index() {...} definierar sessionsindexmetoden som laddar sessionsindexvyn.
- offentlig funktion flash_message(){...} definierar flashmeddelandemetoden som ställer in flashdata och omdirigerar sedan till flash_index-rutten
Låt oss nu skapa vyn som visar värdet för sessionsdata.
Skapa en ny katalogsession i application/views
Skapa en ny fil index.php i application/views/sessions
Lägg till följande kod
<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>
HÄR,
session->userdata('msg');?> hämtar värdet för sessionsdatan med nyckeln msg och visar det i webbläsaren.
Låt oss nu skapa rutterna för vår sessionsflashmetod
Öppna application/config/routes.php
Lägg till följande rader
$route['flash_index'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/flash_message';
Låt oss nu starta den inbyggda servern för PHP och testa våra snabbmeddelanden
Öppna terminalen
Kör följande kommando
cd C:\Sites\ci-app php -S localhost:3000
HÄR,
Ovanstående kommando bläddrar till programkodkatalogen och startar den inbyggda servern på port 3000.
Obs: sökvägen till programmet måste matcha sökvägen dit du laddade ner CodeIgniter, och du kan använda vilket portnummer som helst som är ledigt på din dator. Det är inte nödvändigt att använda port 3000.
Ladda följande URL i din webbläsare: http://localhost:3000/flash_message
Du kommer att omdirigeras till följande URL, och du får följande resultat: http://localhost:3000/flash_index
Klicka på uppdateringsknappen i din webbläsare eller tryck på F5
Du kommer nu att få följande resultat
Lagring av användardata i CI-sessioner
Låt oss nu titta på ett något mer avancerat exempel. För att förenkla det kommer vi att simulera användarautentisering och inte göra själva implementeringen av att verifiera användarposten i databasen och det inskickade lösenordet.
Låt oss börja med rutterna
Öppna routes.php som finns i application/config
Lägg till följande rutter
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
HÄR,
- $route['login'] = 'sessionskontroller/inloggning'; definierar rutten som visar inloggningsformuläret
- $route['authenticate'] = 'sessionskontroller/autenticera'; definierar rutten som simulerar framgångsrik användarinloggning och ställer in sessionsinloggningsdata.
- $route['settings'] = 'sessionskontroller/inställningar'; definierar en skyddad sida som endast ska vara tillgänglig för inloggade användare
- $route['dashboard'] = 'sessionskontroller/dashboard'; definierar en skyddad sida som endast ska vara tillgänglig för inloggade användare.
- $route['logout'] = 'sessionskontroller/utloggning'; loggar ut användaren genom att förstöra sessionsdata
Låt oss nu uppdatera SessionController
Öppna applikation/kontroller/SessionController.php
Lägg till följande metoder
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')); }
HÄR,
- public function check_auth($page) {…} definierar metoden som kontrollerar om användaren är inloggad och sedan tillåter åtkomst till sidan. Om en användare inte är inloggad omdirigeras användaren till inloggningssidan med ett snabbmeddelande.
- public function login() {…} laddar inloggningsvyn som finns i sessionskatalogen.
- public function authenticate() {...} ställer in sessionsanvändardata för nycklarna loged_in och användarnamn. OBS: Vi verifierar inga inloggningsdetaljer mot databasen. Vi antar helt enkelt att de inlämnade uppgifterna är ok och ställer in sessionsdata.
- public function dashboard() {…} laddar dashboardsidan efter att ha anropat $this->check_auth('dashboard'); vilket verifierar att logged_in-sessionsnyckeln är inställd.
- public function settings() {…} laddar inställningssidan, som också är skyddad
- public function logout() {...} förstör sessionsdata och loggar ut användaren. Metoden omdirigerar även till inloggningssidan
CodeVisningar av Igniter-sessionen
Skapa följande vyer i applikation/visningar/sessioner
- instrumentpanel.php
- login.php
- settings.php
Lägg till följande kod till 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>
HÄR,
session->userdata('användarnamn');?> visar användarnamnet som vi anger i autentiseringsmetoden
Lägg till följande kod till 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>
HÄR,
Inloggningsformuläret skickas till autentiseringsrutten.
Lägg till följande kod till 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>
Det var allt för våra åsikter. Låt oss nu testa vår applikation.
I den här handledningen använder vi den inbyggda PHP-webbservern, men du kan använda vilken webbserver som helst som stöder PHP.
Öppna terminalen
Kör följande kommando
cd C:\Sites\ci-app php -S localhost:3000
HÄR,
Ovanstående kommando bläddrar till programkodkatalogen och startar den inbyggda servern på port 3000.
Obs: sökvägen till programmet måste matcha sökvägen dit du laddade ner CodeIgniter, och du kan använda vilket portnummer som helst som är ledigt på din dator. Det är inte nödvändigt att använda port 3000.
Öppna följande URL i din webbläsare: http://localhost:3000/dashboard
Du kommer att omdirigeras till följande sida
Klicka på knappen Logga in
Du kommer att se följande resultat
Efter att vi loggat in kan vi nu se sessionsdata.





