Vous avez raison, l'état de votre demande n'est pas reporté de la demande à la demande.
Contrairement aux applications de bureau, les applications web ne resteront pas initialisées parce que le serveur, chaque fois qu'il peut être un autre visiteur, veut quelque chose de complètement différent. Vous savez qui utilise l'application de bureau, mais vous ne savez pas nécessairement qui demande la page. Imaginez 10 utilisateurs qui font des choses différentes simultanément sur votre application web? L'application entière ne fonctionnerait pas nécessairement pour chacun de ces visiteurs. Imaginez avec 10 000 visiteurs ...
Il existe des moyens de conserver certaines données de la demande à la demande. L'application sera réinitialisée à chaque fois, oui, mais vous pourrez alors recharger l'état de ce que vous faisiez. Il tourne toujours autour des mêmes méthodes générales:
Cookies; Les cookies sont un petit fichier qui est conservé du côté client et quel contenu sera disponible sur chaque requête. En PHP, ceci est disponible en utilisant $_COOKIE variable. Dans tous les cas, vous pouvez serialize vos instances de classe et les recharger ensuite. Le problème est que vous ne voudriez pas y mettre des données sensibles car tout corps (malveillant) peut les voir et les modifier.
POST ou GET; Dans chaque requête, vous passez un état dans le $_GET request (l'URL telle que http://localhost/myscript.php?iamatstep=4) ou via un $_POST comme l'utilisation d'un champ de saisie masqué dans un formulaire, ces données peuvent être cryptées et n'ont de sens que pour vous, mais vous êtes toujours Remettre les données sensibles au client et n'importe qui pourrait les manipuler
Base de données, disque ou toute autre chose sur le serveur Encore une fois, vous sérialisez vos données dans un fichier par exemple à la fin d'une requête prête à être L'avantage principal est qu'il reste sur votre serveur. L'inconvénient est qu'à ce stade, vous ne savez pas quelles données extraire pour quelle requête, car il peut y avoir plusieurs utilisateurs sur votre application au niveau du serveur. en même temps...
Et c'est là qu'intervient la notion de $_SESSION. C'est juste une façon emballée d'utiliser tout cela en même temps. Ce n'est pas magique comme souvent c'est perçu par les débutants. Lorsque vous utilisez une session, les données placées dans le $ _SESSION sont stockées quelque part sur le serveur (normalement un fichier dans un répertoire temporaire bien qu'il puisse être changé en quelque chose comme une base de données) et un ID unique est attribué à cette session. dans un cookie qui suivra le visiteur de la demande à la demande. Donc, la seule chose du côté du client est un grand nombre dans le cookie. Sur la prochaine requête, le navigateur indique à PHP sur le serveur que c'est le numéro de session 12345, charge le fichier correspondant s'il existe et que les données sont à nouveau disponibles. Si les cookies ne sont pas activés, ils peuvent être transmis dans un GET ou un POST, bien qu'il soit souvent préférable de ne pas y aller (voir session.use_trans_sid's note).
Il semble souvent que sur chacune de vos pages vous avez besoin d'authentification.
<?php
// verify if we have a current session
if (isset($_SESSION['login'])) {
// get data in current session
$username = $_SESSION['login']['username'];
$isLoggedIn = $_SESSION['login']['isLoggedIn'];
} else {
$username = '';
$isLoggedIn = false;
}
// take care of the unauthorized users
if (!$isLoggedIn) {
// maybe a redirection here...
}
// do the things a logged in users has the permission to do
Et pour régler la session, il regardera probablement comme ça:
<?php
// handle the form post of your login page for example
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
// verify the username and password against a database
if ($everythingIsOkay) {
// we can consider this user logged in and create a session
$_SESSION['login']['username'] = $username;
$_SESSION['login']['isLoggedIn'] = true;
// and now maybe redirect the user to the correct page
}
}
// raise an error about an invalid login
Et enfin, peut-être une page qui logout.php quelque chose comme ça:
<?php
unset($_SESSION['login']);
// redirect the user to the login page