Comment définir une session dans Codeigniter avec un exemple
Gestion des sessions CodeIgniter
Si vous avez déjà développé des applications de bureau, vous savez probablement que vous pouvez définir une variable globale, lui attribuer une valeur et l'utiliser tout au long du cycle de vie de l'application en ouvrant et fermant plus d'une (1) et chaque requête aura accès à la variable globale.
En d’autres termes, l’état de l’application est conservé. C'est-à-dire que si, lorsque vous vous connectez, vous définissez le nom de l'entreprise sur une variable globale, même après avoir fermé le formulaire de connexion, cet état du nom de l'entreprise est conservé.
HTTP fonctionne un peu différemment du scénario ci-dessus que nous venons de décrire. C'est apatride. Autrement dit, tout ce que vous faites dans une requête ne persiste pas dans la requête suivante. T
o contourner ce problème. Nous avons deux (2) solutions en PHP. Nous pouvons soit travailler avec des cookies qui sont de petits fichiers placés sur l'ordinateur de l'utilisateur, soit travailler avec des sessions similaires aux cookies mais qui sont stockées sur le serveur et ont une plus grande capacité que les cookies.
Quand utiliser les séances ?
Les sessions sont généralement utiles lorsque vous souhaitez connaître les activités de l'utilisateur de page en page. Par exemple, disons que vous disposez d’une zone protégée sur le site Web. Les utilisateurs n'ont pas besoin de se connecter sur chaque page. Vous pouvez permettre à l'utilisateur de se connecter une fois et de stocker ses informations dans une variable de session, puis de réutiliser les mêmes données pour d'autres demandes. D'autres cas d'utilisation incluent le travail sur un système d'achat et l'utilisateur doit ajouter des articles au panier.
Alternativement, CodeIgniter utilise également des sessions pour rendre les données disponibles une seule fois lors de la requête suivante. Ceci est utile si vous avez peut-être modifié et mis à jour un enregistrement de base de données et si vous souhaitez renvoyer des commentaires à l'utilisateur lorsqu'il est redirigé vers une autre page.
Envoi de messages Flash vers d'autres pages avec des sessions CI
Dans cette section, vous apprendrez à envoyer des messages flash vers d'autres pages à l'aide de la bibliothèque de sessions dans CodeIgniter
Créez un nouveau fichier SessionController dans
application/controllers/SessionController.php
Ajoutez le code suivant
<?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')); } }
ICI,
- class SessionController extends CI_Controller {…} définit la classe SessionController et étend la classe du contrôleur parent.
- public function __construct() {…} définit la méthode constructeur qui initialise la classe parent et charge l'assistant d'URL et la bibliothèque de session.
- public function index() {…} définit la méthode d'index de session qui charge la vue d'index de session.
- public function flash_message(){…} définit la méthode de message flash qui définit les données flash puis redirige vers la route flash_index
Créons maintenant la vue qui affichera la valeur des données de session.
Créer une nouvelle session d'annuaire dans application/views
Créez un nouveau fichier index.php dans application/views/sessions
Ajoutez le code suivant
<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>
ICI,
session->userdata('msg');?> récupère la valeur des données de session avec la clé msg et l'affiche dans le navigateur.
Créons maintenant les routes pour notre méthode flash de session
Ouvrez application/config/routes.php
Ajouter les lignes suivantes
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
Démarrons maintenant le serveur intégré pour PHP et testez nos messages flash
Ouvrir le terminal
Exécutez la commande suivante
cd C:\Sites\ci-app php -S localhost:3000
ICI,
La commande ci-dessus accède au répertoire du code de l'application et démarre le serveur intégré sur le port 3000.
Remarque : le chemin de l'application doit correspondre au chemin sur lequel vous avez téléchargé CodeIgniter et vous pouvez utiliser n'importe quel numéro de port libre sur votre ordinateur. Il n'est pas nécessaire d'utiliser le port 3000.
Chargez l'URL suivante dans votre navigateur Web : http://localhost:3000/flash_message
Vous serez redirigé vers l'URL suivante et vous obtiendrez les résultats suivants : http://localhost:3000/flash_index
Cliquez sur le bouton Actualiser de votre navigateur Web ou appuyez sur F5
Vous obtiendrez maintenant les résultats suivants
Stockage des données utilisateur dans les sessions CI
Regardons maintenant un exemple légèrement plus avancé. Pour faire simple, nous simulerons l'authentification de l'utilisateur et ne procéderons pas à la mise en œuvre réelle de la vérification de l'enregistrement de l'utilisateur dans la base de données et du mot de passe soumis.
Commençons par les itinéraires
Ouvrez routes.php situé dans application/config
Ajoutez les itinéraires suivants
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
ICI,
- $route['login'] = 'sessioncontroller/login'; définit l'itinéraire qui affiche le formulaire de connexion
- $route['authenticate'] = 'sessioncontroller/authenticate'; définit l'itinéraire qui simule une connexion utilisateur réussie et définit les données de connexion de session.
- $route['settings'] = 'sessioncontroller/settings'; définit une page protégée qui ne doit être accessible qu'aux utilisateurs connectés
- $route['dashboard'] = 'sessioncontroller/dashboard'; définit une page protégée qui ne doit être accessible qu'aux utilisateurs connectés.
- $route['logout'] = 'sessioncontroller/logout'; déconnecte l'utilisateur en détruisant les données de session
Mettons maintenant à jour le SessionController
Ouvrez application/controllers/SessionController.php
Ajoutez les méthodes suivantes
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')); }
ICI,
- public function check_auth($page) {…} définit la méthode qui vérifie si l'utilisateur est connecté puis autorise l'accès à la page. Si un utilisateur n'est pas connecté, il est redirigé vers la page de connexion avec un message flash.
- public function login() {…} charge la vue de connexion située dans le répertoire des sessions.
- public function Authenticate() {…} définit les données utilisateur de session pour les cléslog_in et username. REMARQUE : Nous ne vérifions aucune information de connexion par rapport à la base de données. Nous supposons simplement que les détails soumis sont corrects et définissons les données de session.
- public function Dashboard() {…} charge la page du tableau de bord après avoir appelé $this->check_auth('dashboard'); qui vérifie que la clé de session connecté_in est définie.
- public function settings() {…} charge la page des paramètres qui est également protégée
- public function logout() {…} détruit les données de session et déconnecte l'utilisateur. La méthode redirige également vers la page de connexion
Vues de session CodeIgniter
Créez les vues suivantes dans application/views/sessions
- tableau de bord.php
- login.php
- settings.php
Ajoutez le code suivant à 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>
ICI,
session->userdata('username');?> affiche le nom d'utilisateur que nous avons défini dans la méthode d'authentification
Ajoutez le code suivant à 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>
ICI,
Le formulaire de connexion est soumis pour authentifier l'itinéraire.
Ajoutez le code suivant à 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>
Voilà pour nos points de vue. Testons maintenant notre application.
Dans ce didacticiel, nous utilisons le serveur Web PHP intégré, mais vous pouvez utiliser n'importe quel serveur Web prenant en charge PHP.
Ouvrir le terminal
Exécutez la commande suivante
cd C:\Sites\ci-app php -S localhost:3000
ICI,
La commande ci-dessus accède au répertoire du code de l'application et démarre le serveur intégré sur le port 3000.
Remarque : le chemin de l'application doit correspondre au chemin sur lequel vous avez téléchargé CodeIgniter et vous pouvez utiliser n'importe quel numéro de port libre sur votre ordinateur. Il n'est pas nécessaire d'utiliser le port 3000.
Ouvrez l'URL suivante dans votre navigateur Web : http://localhost:3000/dashboard
vous serez redirigé vers la page suivante
Cliquez sur le bouton Connexion
Vous verrez les résultats suivants
Une fois connectés, nous pouvons maintenant voir les données de session.
Résumé
Dans ce didacticiel, vous avez appris les bases de la bibliothèque de session CodeIgniter et appris à l'utiliser pour stocker des données temporelles sous forme de messages flash et à stocker des données plus permanentes, c'est-à-dire les données de connexion des utilisateurs.