Comment configurer une session dans CodeAllumeur avec exemple

⚡ Résumé intelligent

CodeLa gestion de session Igniter stocke les données utilisateur entre les requêtes HTTP sans état, permettant à une application de mémoriser un utilisateur connecté, les articles de son panier ou des messages flash ponctuels. Cet exemple illustre l'envoi de messages flash et une connexion simulée. CodeBibliothèque de session Igniter.

  • 🌐 Pourquoi des séances ? Le protocole HTTP est sans état, les sessions préservent donc les données utilisateur telles que l'état de connexion entre les différentes requêtes de pages sur le serveur.
  • (I.e. Cookies vs Sessions : Les cookies stockent de petites quantités de données sur l'ordinateur de l'utilisateur, tandis que les sessions stockent des données plus importantes sur le serveur et sont plus sûres pour les données sensibles.
  • ???? Données Flash : La fonction set_flashdata() stocke un message disponible uniquement lors de la prochaine requête, idéal pour un retour d'information ponctuel après une redirection.
  • (I.e. Données d'utilisateur: La fonction set_userdata() conserve des valeurs telles que username et logged_in pour toute la session, et la fonction unset_userdata() les efface lors de la déconnexion.
  • 🛡️ Contrôle d'Accès : Une méthode réutilisable check_auth() redirige les visiteurs vers la page de connexion lorsque la clé de session logged_in est manquante.
  • 🧪 Exemple de travail : Le tutoriel décrit les routes, un contrôleur et des vues de style Bulma pour illustrer les flux de session flash et persistants.
  • 🤖 Assistance IA : Les outils d'IA peuvent structurer les contrôleurs de session, générer des cartes de routage et signaler les problèmes de sécurité liés à la gestion des sessions avant leur déploiement.

CodeGestion de session Igniter

CodeGestion de session Igniter

Si vous avez déjà développé des applications de bureau, vous savez probablement qu'il est possible de définir une variable globale, de lui attribuer une valeur et de l'utiliser tout au long du cycle de vie de l'application. Lors de l'ouverture et de la fermeture de plusieurs formulaires, chaque requête aura accès à cette variable globale.

En d'autres termes, l'état de l'application est conservé. Autrement dit, si lors de votre connexion vous avez défini le nom de l'entreprise dans une variable globale, alors même après la fermeture du formulaire de connexion, ce nom d'entreprise est préservé.

Le protocole HTTP fonctionne différemment du scénario que nous venons de décrire. Il est sans état. Autrement dit, les actions effectuées dans une requête ne sont pas conservées dans la requête suivante.

Pour contourner ce problème, nous disposons de deux solutions en PHP. Nous pouvons soit utiliser des cookies, qui sont de petits fichiers placés sur l'ordinateur de l'utilisateur, soit utiliser des sessions, qui sont similaires aux cookies mais sont stockées sur le serveur et ont une capacité plus importante.

Quand utiliser les séances ?

Les sessions sont généralement utiles pour suivre l'activité d'un utilisateur d'une page à l'autre. Par exemple, imaginons une zone protégée sur un site web. Les utilisateurs n'ont pas besoin de se connecter à chaque page. Il suffit de leur permettre de se connecter une seule fois et de stocker leurs identifiants dans une variable de session, puis de réutiliser ces données lors des requêtes suivantes. On peut également les utiliser dans le cadre d'une boutique en ligne.ping le système et l'utilisateur doivent ajouter des articles à la boutiqueping Chariot.

Alternativement, CodeIgniter utilise également les sessions pour que les données ne soient disponibles qu'une seule fois, lors de la requête suivante. Ceci est utile lorsque vous avez modifié et mis à jour un enregistrement de base de données et que vous souhaitez afficher un message à 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 Codeallumeur.

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éez un nouveau répertoire sessions 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'] = 'sessioncontroller';
$route['flash_message'] = 'sessioncontroller/flash_message';

Commençons 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 d’accès à l’application doit correspondre au chemin d’accès où vous l’avez téléchargée. CodeAvec Igniter, vous pouvez utiliser n'importe quel port libre sur votre ordinateur. Il n'est pas nécessaire d'utiliser le port 3000.

Charger les éléments suivants URL dans votre navigateur Web : http://localhost:3000/flash_message

Vous serez redirigé vers la page suivante URLet vous obtiendrez les résultats suivants : http://localhost:3000/flash_index

Envoi de messages Flash vers d'autres pages

Cliquez sur le bouton Actualiser de votre navigateur Web ou appuyez sur F5

Vous obtiendrez maintenant les résultats suivants

Envoi de messages Flash vers d'autres pages

Stockage des données utilisateur dans les sessions CI

Prenons maintenant un exemple légèrement plus complexe. Par souci de simplicité, nous simulerons l'authentification de l'utilisateur sans implémenter la vérification de son enregistrement dans la base de données ni du mot de passe saisi.

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,

  • La fonction publique `check_auth($page) {…}` définit la méthode qui vérifie si l'utilisateur est connecté, puis autorise l'accès à la page. Si l'utilisateur n'est pas connecté, il est redirigé vers la page de connexion et un message d'erreur s'affiche.
  • public function login() {…} charge la vue de connexion située dans le répertoire 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 logged_in est définie.
  • La fonction publique 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

CodeVues de session Igniter

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: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>

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: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>

ICI,

Le formulaire de connexion est soumis à la procédure d'authentification.

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: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>

Voilà pour nos présentations. Passons maintenant au test de 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 d’accès à l’application doit correspondre au chemin d’accès où vous l’avez téléchargée. CodeAvec Igniter, vous pouvez utiliser n'importe quel port libre sur votre ordinateur. Il n'est pas nécessaire d'utiliser le port 3000.

Ouvrez ce qui suit URL dans votre navigateur Web : http://localhost:3000/dashboard

Vous serez redirigé vers la page suivante

CodeVues de session Igniter

Cliquez sur le bouton Connexion

Vous verrez les résultats suivants

CodeVues de session Igniter

Une fois connectés, nous pouvons maintenant voir les données de session.

FAQ

Les données utilisateur sont conservées pendant toute la durée de la session, jusqu'à ce que vous les supprimiez ou que la session expire. Les données flash sont des valeurs temporaires qui ne sont conservées que le temps de la prochaine requête, puis supprimées automatiquement ; elles conviennent aux messages ponctuels.

Les données temporaires (Tempdata) sont des données de session avec une durée de vie définie. Vous appelez `mark_as_temp()` ou `set_tempdata()` avec une durée de vie en secondes, après quoi CodeIgniter supprime automatiquement la valeur, même si la session est toujours active.

Par défaut CodeIgniter stocke les sessions dans des fichiers sur le serveur. Vous pouvez choisir le pilote (base de données, Redis ou Memcached) dans le fichier de configuration si vous avez besoin d'un stockage partagé entre plusieurs serveurs.

Oui. L'IA peut analyser la configuration de votre session afin d'identifier les failles de sécurité, recommander la régénération de l'identifiant de session après la connexion, activer le chiffrement des cookies et utiliser uniquement des cookies HTTPS pour réduire les risques de détournement de session.

Oui. D'après une brève description, l'IA peut générer les routes, un contrôleur de session et les vues protégées. Il est toujours recommandé d'ajouter une véritable vérification de la base de données et un hachage des mots de passe, car les frameworks d'IA utilisent souvent des vérifications simulées.

Résumez cet article avec :