"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Gestion de session avec le modèle PRG et le clignotement

Gestion de session avec le modèle PRG et le clignotement

Publié le 2024-08-05
Parcourir:299

Session Handling with the PRG pattern and Flashing

Dans notre projet précédent, renvoyer une vue directement à partir de la requête POST lorsque la validation échouait n'était pas la meilleure approche.

Le problème

Lorsqu'un utilisateur soumet un formulaire de connexion avec des données non valides, le formulaire affiche des messages d'erreur et redirige l'utilisateur vers la page de connexion. Cependant, si l'utilisateur actualise la page ou s'éloigne et revient à la page de connexion, les mêmes messages d'erreur persistent.

La solution

Pour résoudre ce problème, nous pouvons utiliser des sessions pour stocker les erreurs et implémenter le modèle PRG. Nous pouvons stocker les erreurs dans la variable superglobale $_SESSION et mettre à jour l'instruction d'erreurs dans create.php comme :

$_SESSION['errors'] = $form->errors();
view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);
?? [] ]);


Mais même avec ce changement, le problème persiste. Pour résoudre ce problème, nous devons modifier l'instruction return comme :

return redirect ('/login');

redirection de retour ('/login');



je
Il déplace l'utilisateur vers la page de connexion si une erreur s'est produite, mais n'affiche pas l'erreur à l'utilisateur w
Nous flashons ensuite la variable superglobale $_SESSION pour détruire la session après un court laps de temps :

return redirect ('/login');

$_SESSION['_flashed']['erreurs'] = $form->erreurs();

Vous pouvez maintenant remarquer que le problème est résolu mais pour refactoriser ce code, nous devons ajouter la méthode PRG dans une classe

La classe de session (modèle PRG)


Pour le refactoring, nous créons un nouveau fichier nommé Core/Session.php contenant une classe Session qui gère les sessions utilisateur :

return redirect ('/login');

  • La méthode flash stocke les données dans le tableau $_SESSION['_flash'], qui est utilisé pour le flashage de session.
  • La méthode get vérifie s'il y a des données flashées dans $_SESSION['_flash'] et les renvoie. Sinon, il renvoie les données de session normales ou la valeur par défaut.
  • La méthode unflash désactive les données flashées, les rendant disponibles uniquement pour la requête suivante.
  • Le modèle PRG est implémenté en stockant les données dans la session à l'aide de la méthode put, en les redirigeant (par exemple, en utilisant return redirect('/login');), puis en récupérant les données dans la requête suivante à l'aide de la méthode get.

    En utilisant cette classe Session, nous pouvons implémenter le modèle PRG et le flashage de session pour gérer les sessions utilisateur et empêcher les soumissions de formulaires en double et la persistance indésirable des messages d'erreur.

    a une méthode


    Dans ce fichier, la méthode has renvoie une valeur booléenne indiquant si une clé existe dans la session :

    return redirect ('/login');
    
    
    . la fonction statique publique a ($ clé) { return (bool) static :: get ($ clé); }

    Refactoriser la fonction de déconnexion


    Dans le fichier function.php, nous refactorisons la fonction de déconnexion pour utiliser la classe Session :

    return redirect ('/login');
    
    
    Session :: détruire ();

    Refactoriser la méthode get


    Comme le projet fonctionne déjà bien. Mais nous devons refactoriser la méthode get dans Core/Session.php pour consolider le code en une seule instruction :

    return redirect ('/login');
    
    
    fonction statique publique get($key, $default = null) { return $_SESSION['_flash'][$key] ?? $_SESSION[$clé] ?? $par défaut ; }

    De nombreuses refactorisations sont effectuées dans notre projet actuel pour le rendre meilleur, plus facile à comprendre et augmenter les performances du code.

    J'espère que vous l'avez bien compris !.

    Déclaration de sortie Cet article est reproduit sur : https://dev.to/ghulam_mujtaba_247/session-handling-with-the-prg-pattern-and-flashing-1jog?1 En cas de violation, veuillez contacter [email protected] pour supprimer il
    Dernier tutoriel Plus>

    Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

    Copyright© 2022 湘ICP备2022001581号-3