Session PHP et cookies PHP avec exemple

โšก Rรฉsumรฉ intelligent

En PHP, les cookies et les sessions prรฉservent l'รฉtat du systรจme malgrรฉ le protocole HTTP sans รฉtat, mais stockent les donnรฉes diffรฉremment. Ce guide explique comment les cookies enregistrent de petits fichiers cรดtรฉ client, comment les sessions conservent les donnรฉes sur le serveur, et comment crรฉer, lire et supprimer chacun d'eux ร  l'aide d'un code fonctionnel.

  • (I.e. Que sont les cookies ? Un cookie est un petit fichier, jusqu'ร  4 Ko, que le serveur stocke sur le client et qui est renvoyรฉ avec chaque requรชte ultรฉrieure.
  • ๐Ÿ‡ง๐Ÿ‡ท Quelles sont les sรฉances ? Une session stocke des donnรฉes sur le serveur sous un identifiant unique, conservรฉ dans le tableau $_SESSION et rรฉfรฉrencรฉ par un cookie de session.
  • ???? Diffรฉrence clรฉ : Les cookies rรฉsident sur le client et conviennent aux petites quantitรฉs de donnรฉes non sensibles ; les sessions rรฉsident sur le serveur et contiennent des donnรฉes plus volumineuses ou privรฉes.
  • ๏ธ Crรฉation de cookies : La fonction setcookie() dรฉfinit un nom, une valeur et, en option, les indicateurs d'expiration, de chemin, de domaine, de sรฉcuritรฉ et d'utilisation exclusive de HTTP avant toute sortie HTML.
  • ๐Ÿ“ Crรฉation de sessions : session_start() lance une session, aprรจs quoi vous lisez et รฉcrivez des valeurs via le tableau superglobal $_SESSION.
  • ๐Ÿ‡ง๐Ÿ‡ท Nettoyer: Faites expirer un cookie en dรฉfinissant une date et une heure antรฉrieures ; terminez une session avec session_destroy() ou effacez une valeur avec unset().
  • ๐Ÿค– Assistance IA : Les outils d'IA peuvent mettre en ล“uvre une gestion sรฉcurisรฉe des sessions et signaler les faiblesses des cookies ou des sessions dans le code PHP existant.

Cookies et sessions PHP

Quโ€™est-ce quโ€™un cookie ?

Un cookie est un petit fichier d'une taille maximale de 4 Ko que le serveur web stocke sur l'ordinateur client.

Une fois qu'un cookie a รฉtรฉ dรฉfini, toutes les requรชtes de page qui suivent renvoient le nom et la valeur du cookie.

Un cookie ne peut รชtre lu que depuis le domaine qui l'a รฉmis. Par exemple, un cookie dรฉfini ร  l'aide du domaine www.guru99.com ne peut pas รชtre lu depuis le domaine carriere.guru99.com.

La plupart des sites Web sur Internet affichent des รฉlรฉments provenant dโ€™autres domaines tels que la publicitรฉ. Les domaines desservant ces รฉlรฉments peuvent รฉgalement paramรฉtrer leurs propres cookies. Ceux-ci sont appelรฉs cookies tiers.

Un cookie crรฉรฉ par un utilisateur ne peut รชtre visible que par lui. Les autres utilisateurs ne peuvent pas voir sa valeur.

La plupart des navigateurs web proposent des options pour dรฉsactiver les cookies, les cookies tiers, ou les deux.

Si tel est le cas, PHP rรฉpond en transmettant le jeton du cookie dans le URL.

Le schรฉma ci-dessous illustre le fonctionnement des cookies.

Qu'est-ce qu'un cookie

Ici,

1) Un utilisateur demande une page qui stocke des cookies

2) Le serveur dรฉpose le cookie sur l'ordinateur de l'utilisateur

3) Les autres demandes de page de l'utilisateur renverront le nom et la valeur du cookie

Pourquoi et quand utiliser les Cookies ?

  • HTTP est un protocole sans รฉtat ; les cookies nous permettent de tracL'รฉtat de l'application est enregistrรฉ grรขce ร  de petits fichiers stockรฉs sur l'ordinateur de l'utilisateur. L'emplacement de ces cookies dรฉpend du navigateur. Internet Explorer les stocke gรฉnรฉralement dans le dossier des fichiers Internet temporaires.
  • La personnalisation de l'expรฉrience utilisateur passe par la possibilitรฉ pour les utilisateurs de sรฉlectionner leurs prรฉfรฉrences. Les pages suivantes sont personnalisรฉes en fonction des prรฉfรฉrences enregistrรฉes dans les cookies.
  • Tracking les pages visitรฉes par un utilisateur

Crรฉation de cookies

Examinons maintenant la syntaxe de base utilisรฉe pour crรฉer un cookie.

<?php

setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]);

?>

ICI,

  • ยซ setcookie ยป est le Fonction PHP utilisรฉ pour crรฉer le cookie.
  • ยซ cookie_name ยป est le nom du cookie que le serveur utilisera pour rรฉcupรฉrer sa valeur ร  partir de la variable de tableau $_COOKIE. Ce champ est obligatoire.
  • ยซ cookie_value ยป correspond ร  la valeur du cookie et est obligatoire.
  • L'option ยซ [expiry_time] ยป est facultative ; elle permet de dรฉfinir la durรฉe de validitรฉ du cookie, par exemple une heure. Cette durรฉe est calculรฉe ร  l'aide de la fonction PHP `time()` ร  laquelle on ajoute ou soustrait un nombre de secondes supรฉrieur ร  zรฉro ; par exemple, `time() + 3600` correspond ร  une heure.
  • ยซ [cookie_path] ยป est facultatif ; il peut รชtre utilisรฉ pour dรฉfinir le chemin du cookie sur le serveur. La barre oblique ยซ / ยป signifie que le cookie sera mis ร  disposition sur l'ensemble du domaine. Les sous-rรฉpertoires limitent l'accรจs des cookies au sous-domaine.
  • ยซ [domaine] ยป est facultatif ; il peut รชtre utilisรฉ pour dรฉfinir la hiรฉrarchie dโ€™accรจs aux cookies, cโ€™est-ร -dire www.cookiedomain.com signifie l'ensemble du domaine tandis que www.sub.cookiedomain.com limite l'accรจs aux cookies ร  www.sub.cookiedomain.com et ses sous-domaines.
  • L'option ยซ [secure] ยป est facultative ; sa valeur par dรฉfaut est ยซ false ยป. Elle dรฉtermine si le cookie est envoyรฉ via HTTPS si elle est activรฉe, ou via HTTP si elle est dรฉsactivรฉe.
  • L'option ยซ [httponly] ยป est facultative. Si elle est dรฉfinie sur true, les langages de script cรดtรฉ client tels que Javascรฉnario Impossible d'accรฉder au cookie.

ร€ noter: La fonction PHP setcookie doit รชtre exรฉcutรฉe avant la balise d'ouverture HTML.

Prenons maintenant un exemple utilisant des cookies.

Nous allons crรฉer un programme simple qui nous permettra de stocker le nom d'utilisateur dans un cookie qui expirera aprรจs soixante secondes.

Le code ci-dessous montre l'implรฉmentation de l'exemple ci-dessus ยซ cookies.php ยป.

<?php
setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds
echo 'the cookie has been set for 60 seconds';
?>

Sortie :

the cookie has been set for 60 seconds

Rรฉcupรฉration de la valeur du Cookie

Crรฉez un autre fichier nommรฉ ยซ cookies_read.php ยป avec le code suivant.

<?php
print_r($_COOKIE); // output the contents of the cookie array variable
?>

Sortie :

Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )

Remarque : $_COOKIE est une variable superglobale intรฉgrรฉe ร  PHP. Elle contient les noms et les valeurs de tous les cookies dรฉfinis.

Le nombre de cookies et leur taille sont limitรฉs par le navigateur, gรฉnรฉralement autour de 50 cookies par domaine et 4 Ko par cookie.

Testons notre application. Supposons que vous ayez enregistrรฉ vos fichiers PHP dans un dossier phptuts.

  • ร‰tape 1 โ€“ ouvrez votre navigateur Web et saisissez le URL http://localhost/phptuts/cookies_read.php

Rรฉcupรฉration de la valeur du Cookie

Remarque : seul un tableau vide a รฉtรฉ affichรฉ

  • ร‰tape 2 โ€“ Accรฉdez ร  URL http://localhost/phptuts/cookies.php

Rรฉcupรฉration de la valeur du Cookie

  • ร‰tape 3 โ€“ revenez au premier onglet, puis cliquez sur le bouton d'actualisation

Rรฉcupรฉration de la valeur du Cookie

Attendez une minute, puis cliquez ร  nouveau sur le bouton d'actualisation. Quels rรฉsultats avez-vous obtenus ?

Supprimer les cookies

  • Si vous souhaitez dรฉtruire un cookie avant son heure d'expiration, vous dรฉfinissez l'heure d'expiration sur une heure dรฉjร  รฉcoulรฉe.
  • Crรฉez un nouveau fichier nommรฉ cookie_destroy.php avec le code suivant
<?php

setcookie("user_name", "Guru99", time() - 360,'/');

?>
  • Rรฉpรฉtez les รฉtapes 1 ร  3 de la section ci-dessus sur la rรฉcupรฉration des valeurs des cookies.
  • Ouvrez le URL http://localhost/phptuts/cookie_destroy.php
  • Passer ร  la URL http://localhost/phptuts/cookies_read.phpQuels rรฉsultats affiche-t-il ?

Qu'est-ce qu'une sรฉance ?

  • Une session est une variable globale stockรฉe sur le serveur.
  • Chaque session se voit attribuer un identifiant unique qui est utilisรฉ pour rรฉcupรฉrer les valeurs stockรฉes.
  • ร€ chaque crรฉation de session, un cookie contenant l'identifiant unique de session est stockรฉ sur l'ordinateur de l'utilisateur et renvoyรฉ avec chaque requรชte au serveur. Si le navigateur client ne prend pas en charge les cookies, l'identifiant unique de session PHP est affichรฉ dans le navigateur. URL.
  • Les sessions ont la capacitรฉ de stocker des donnรฉes relativement volumineuses par rapport aux cookies.
  • Les valeurs de session sont automatiquement supprimรฉes ร  la fermeture du navigateur. Si vous souhaitez stocker les valeurs de maniรจre permanente, vous devez les stocker dans la base de donnรฉes.
  • Tout comme la variable de tableau $_COOKIE, les variables de session sont stockรฉes dans la variable de tableau $_SESSION. Tout comme les cookies, la session doit รชtre dรฉmarrรฉe avant toute balise HTML.

Pourquoi et quand utiliser Sessions ?

  • Vous souhaitez stocker des informations importantes, telles que l'identifiant de l'utilisateur, de maniรจre plus sรฉcurisรฉe sur le serveur, hors de portรฉe des utilisateurs malveillants.
  • Vous souhaitez transmettre des valeurs d'une page ร  une autre.
  • Vous souhaitez une alternative aux cookies sur les navigateurs qui ne prennent pas en charge les cookies.
  • Vous souhaitez stocker les variables globales de maniรจre plus efficace et plus sรปre que de les passer en paramรจtre. URL.
  • Vous รชtes en dรฉveloppementping une application telle qu'une boutiqueping un panier qui doit stocker temporairement des informations d'une capacitรฉ supรฉrieure ร  4 Ko.

Crรฉation d'une session

Pour crรฉer une session, vous devez d'abord appeler la fonction PHP session_start, puis stocker vos valeurs dans la variable de tableau $_SESSION.

Supposons que nous voulions connaรฎtre le nombre de fois qu'une page a รฉtรฉ chargรฉe. Nous pouvons utiliser une session pour cela.

Le code ci-dessous montre comment crรฉer et rรฉcupรฉrer des valeurs ร  partir de sessions.

<?php

session_start(); // start the session

if(isset($_SESSION['page_count']))
{
$_SESSION['page_count'] += 1;
}
else
{
$_SESSION['page_count'] = 1;
}
echo 'You are visitor number ' . $_SESSION['page_count'];

?>

Sortie :

You are visitor number 1

Dรฉtruire les variables de session

La fonction session_destroy() est utilisรฉe pour dรฉtruire l'intรฉgralitรฉ de la session PHP.

Si vous souhaitez supprimer un seul รฉlรฉment de session, utilisez la fonction unset().

Le code ci-dessous illustre comment utiliser les deux mรฉthodes.

<?php

session_destroy(); // destroy entire session

?>
<?php

unset($_SESSION['product']); // destroy product session item

?>

La fonction session_destroy supprime toutes les donnรฉes de session, y compris les cookies associรฉs ร  la session.

La commande ยซ unset ยป libรจre uniquement les variables de session individuelles. Les autres donnรฉes restent intactes.

FAQ

Les cookies stockent des donnรฉes dans un petit fichier sur le navigateur de l'utilisateur et sont conservรฉs ร  chaque requรชte. Les sessions, quant ร  elles, stockent les donnรฉes sur le serveur et n'envoient qu'un cookie d'identification de session. Les sessions sont plus sรปres pour les donnรฉes sensibles ou volumineuses.

Par dรฉfaut, PHP enregistre les donnรฉes de session dans des fichiers situรฉs dans le rรฉpertoire dรฉfini par `session.save_path` dans `php.ini`, gรฉnรฉralement le rรฉpertoire temporaire du systรจme. Les sites ร  fort trafic utilisent souvent une base de donnรฉes, Redis ou Memcached pour cet enregistrement.

Dรฉfinissez l'indicateur HttpOnly afin que JavaLe script ne peut pas lire le cookie, l'attribut Secure garantit que la connexion se fait uniquement via HTTPS, et l'attribut SameSite limite les envois intersites. Pour les sessions, l'identifiant est rรฉgรฉnรฉrรฉ aprรจs la connexion.

Oui. L'IA peut gรฉnรฉrer un flux de connexion qui rรฉgรฉnรจre l'identifiant de session, dรฉfinit des indicateurs de sรฉcuritรฉ pour les cookies, stocke un minimum de donnรฉes cรดtรฉ serveur et applique des dรฉlais d'expiration. RevComparez les rรฉsultats ร  vos exigences de sรฉcuritรฉ.

Oui. L'IA peut dรฉtecter l'absence des attributs HttpOnly ou Secure, les risques de fixation de session, le stockage de donnรฉes sensibles dans les cookies et l'absence de rรฉgรฉnรฉration d'identifiant aprรจs la connexion, puis suggรฉrer le code corrigรฉ.

Rรฉsumez cet article avec :