Jak ustawić sesję w CodeZapłonnik z przykładem
⚡ Inteligentne podsumowanie
CodeZarządzanie sesjami Igniter przechowuje dane użytkownika w bezstanowych żądaniach HTTP, umożliwiając aplikacji zapamiętanie zalogowanego użytkownika, pozycji w koszyku lub jednorazowych wiadomości flash. Ten przykład tworzy komunikaty flash i symulowane logowanie przy użyciu CodeBiblioteka sesji Igniter.

CodeZarządzanie sesjami Igniter
Jeśli tworzyłeś już aplikacje desktopowe, prawdopodobnie wiesz, że możesz zdefiniować zmienną globalną, przypisać jej wartość i używać jej przez cały cykl życia aplikacji. Otwierając i zamykając więcej niż jeden formularz, każde żądanie będzie miało dostęp do zmiennej globalnej.
Innymi słowy, stan aplikacji jest zachowany. Oznacza to, że jeśli podczas logowania ustawisz nazwę firmy jako zmienną globalną, to nawet po zamknięciu formularza logowania stan nazwy firmy zostanie zachowany.
Protokół HTTP działa nieco inaczej niż scenariusz, który właśnie opisaliśmy. Jest bezstanowy. Oznacza to, że cokolwiek zrobisz w jednym żądaniu, nie zostanie zapisane w kolejnym.
Aby obejść ten problem, mamy dwa (2) rozwiązania w PHP. Możemy albo pracować z plikami cookie, które są małymi plikami umieszczanymi na komputerze użytkownika, albo z sesjami, które są podobne do plików cookie, ale są przechowywane na serwerze i mają większą pojemność niż pliki cookie.
Kiedy stosować sesje?
Sesje są zazwyczaj przydatne, gdy chcesz poznać aktywność użytkownika na poszczególnych stronach. Załóżmy na przykład, że masz chroniony obszar na stronie internetowej. Użytkownicy nie muszą się logować na każdej stronie. Możesz pozwolić użytkownikowi zalogować się raz i zapisać jego dane w zmiennej sesji, a następnie ponownie wykorzystać te same dane w kolejnych żądaniach. Inne przypadki użycia obejmują pracę nad sklepem.ping system i użytkownik musi dodać przedmioty do sklepuping wózek.
Alternatywnie CodeIgniter wykorzystuje również sesje, aby dane były dostępne tylko raz przy kolejnym żądaniu. Jest to przydatne, gdy edytowałeś i aktualizowałeś rekord w bazie danych i chcesz zwrócić użytkownikowi informację zwrotną po przekierowaniu na inną stronę.
Wysyłanie wiadomości Flash na inne strony z sesjami CI
W tej sekcji dowiesz się o wysyłaniu wiadomości flash na inne strony przy użyciu biblioteki sesji CodeZapalnik.
Utwórz nowy plik SessionController w
application/controllers/SessionController.php
Dodaj następujący 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')); } }
TUTAJ,
- class SessionController rozszerza CI_Controller {…} definiuje klasę SessionController i rozszerza klasę kontrolera nadrzędnego.
- funkcja publiczna __construct() {…} definiuje metodę konstruktora, która inicjuje klasę nadrzędną i ładuje pomocnika adresu URL oraz bibliotekę sesji.
- funkcja publiczna indeks() {…} definiuje metodę indeksu sesji, która ładuje widok indeksu sesji.
- funkcja publiczna flash_message(){…} definiuje metodę wiadomości flash, która ustawia dane flash, a następnie przekierowuje do trasy flash_index
Utwórzmy teraz widok, który będzie wyświetlał wartość danych sesji.
Utwórz nowy katalog sesji w aplikacji/widoki
Utwórz nowy plik indeks.php w aplikacji/views/sessions
Dodaj następujący 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>
TUTAJ,
session->userdata('msg');?> pobiera wartość danych sesji o kluczu msg i wyświetla ją w przeglądarce.
Stwórzmy teraz trasy dla naszej metody flashowania sesji
Otwórz aplikację/config/routes.php
Dodaj następujące wiersze
$route['flash_index'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/flash_message';
Uruchommy teraz wbudowany serwer dla PHP i przetestuj nasze wiadomości flash
Otwórz terminal
Uruchom następujące polecenie
cd C:\Sites\ci-app php -S localhost:3000
TUTAJ,
Powyższe polecenie powoduje przejście do katalogu z kodem aplikacji i uruchomienie wbudowanego serwera na porcie 3000.
Uwaga: ścieżka aplikacji musi być taka sama, jak ścieżka, do której ją pobrano CodeIgniter i możesz użyć dowolnego numeru portu, który jest wolny na Twoim komputerze. Nie musisz używać portu 3000.
Załaduj następujące URL w Twojej przeglądarce internetowej: http://localhost:3000/flash_message
Zostaniesz przekierowany do następującego miejsca URL, a otrzymasz następujące wyniki: http://localhost:3000/flash_index
Kliknij przycisk odświeżania przeglądarki internetowej lub naciśnij klawisz F5
Teraz otrzymasz następujące wyniki
Przechowywanie danych użytkownika w sesjach CI
Przyjrzyjmy się teraz nieco bardziej zaawansowanemu przykładowi. Dla uproszczenia, zasymulujemy uwierzytelnianie użytkownika, a nie będziemy przeprowadzać faktycznej implementacji weryfikacji rekordu użytkownika w bazie danych i przesłanego hasła.
Zacznijmy od tras
Otwórz Routes.php znajdujący się w application/config
Dodaj następujące trasy
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
TUTAJ,
- $route['login'] = 'kontroler sesji/logowanie'; definiuje trasę wyświetlającą formularz logowania
- $route['authenticate'] = 'kontroler sesji/uwierzytelnij'; definiuje trasę symulującą pomyślne logowanie użytkownika i ustawia dane logowania do sesji.
- $route['ustawienia'] = 'kontroler sesji/ustawienia'; definiuje chronioną stronę, która powinna być dostępna tylko dla zalogowanych użytkowników
- $route['pulpit nawigacyjny'] = 'kontroler sesji/panel kontrolny'; definiuje chronioną stronę, która powinna być dostępna tylko dla zalogowanych użytkowników.
- $route['logout'] = 'kontroler sesji/wylogowanie'; wylogowuje użytkownika niszcząc dane sesji
Zaktualizujmy teraz SessionController
Otwórz aplikację/kontrolery/SessionController.php
Dodaj następujące 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')); }
TUTAJ,
- Funkcja publiczna check_auth($page) {…} definiuje metodę, która sprawdza, czy użytkownik jest zalogowany, a następnie zezwala na dostęp do strony. Jeśli użytkownik nie jest zalogowany, zostaje przekierowany na stronę logowania za pomocą komunikatu flash.
- publiczna funkcja login() {…} ładuje widok logowania znajdujący się w katalogu sesji.
- public function authenticate() {…} ustawia dane użytkownika sesji dla kluczy signed_in i username. UWAGA: Nie weryfikujemy żadnych danych logowania w bazie danych. Po prostu zakładamy, że przesłane dane są poprawne i ustawiamy dane sesji.
- publiczna funkcja dashboard() {…} ładuje stronę pulpitu nawigacyjnego po wywołaniu $this->check_auth('dashboard');, co weryfikuje, czy klucz sesji logged_in jest ustawiony.
- funkcja publiczna settings() {…} ładuje stronę ustawień, która jest również chroniona
- funkcja publiczna logout() {…} niszczy dane sesji i wylogowuje użytkownika. Metoda przekierowuje również na stronę logowania
CodeWidoki sesji Igniter
Utwórz następujące widoki w aplikacji/widoki/sesje
- deska rozdzielcza.php
- login.php
- settings.php
Dodaj następujący kod do 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>
TUTAJ,
session->userdata('username');?> wyświetla nazwę użytkownika, którą ustawiliśmy w metodzie uwierzytelniania
Dodaj następujący kod 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>
TUTAJ,
Formularz logowania przechodzi do ścieżki uwierzytelniania.
Dodaj następujący kod 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 tyle, jeśli chodzi o nasze widoki. Teraz przetestujmy naszą aplikację.
W tym samouczku używamy wbudowanego serwera WWW PHP, ale możesz użyć dowolnego serwera WWW obsługującego PHP.
Otwórz terminal
Uruchom następujące polecenie
cd C:\Sites\ci-app php -S localhost:3000
TUTAJ,
Powyższe polecenie powoduje przejście do katalogu z kodem aplikacji i uruchomienie wbudowanego serwera na porcie 3000.
Uwaga: ścieżka aplikacji musi być taka sama, jak ścieżka, do której ją pobrano CodeIgniter i możesz użyć dowolnego numeru portu, który jest wolny na Twoim komputerze. Nie musisz używać portu 3000.
Otwórz następujące URL w Twojej przeglądarce internetowej: http://localhost:3000/dashboard
Zostaniesz przekierowany na następującą stronę
Kliknij przycisk Zaloguj
Zobaczysz następujące wyniki
Po zalogowaniu możemy już zobaczyć dane sesji.




