WordPress pour le développement d'applications Web sessions

Dans cette série, nous examinons comment il est possible de créer des applications Web à l'aide de WordPress..

Jusqu'ici, nous avons expliqué comment WordPress est une base (plutôt qu'un cadre), son architecture, comment nous devons penser conceptuellement à l'approche. notamment venant d'autres langues, puis nous avons commencé à parler des composants qui constituent une application Web de base.

Pour rappel, nous avons mentionné:

  • Gestion des utilisateurs
  • Les permissions
  • Gestion de session
  • Fonctionnalité de messagerie
  • Sérialisation et récupération de données
  • Routage des URL (parfois appelé règles de réécriture ou de réécriture d'URL ou même simplement des itinéraires)
  • Caching
  • Prise en charge des requêtes personnalisées

Et à partir du dernier post, nous avons couvert à la fois la gestion des utilisateurs et les autorisations..

Dans cet article, nous allons voir comment incorporer des sessions dans une application WordPress. Cependant, nous allons supposer que vous (ou d’autres lecteurs) n'êtes pas familier avec les sessions..

Nous allons donc commencer par une vue de haut niveau des sessions, parler de la relation entre les sessions et WordPress, puis comment commencer à intégrer des sessions à votre application WordPress..


Une introduction aux sessions

Pour ceux d'entre vous qui ne connaissent pas le concept de sessions, il est relativement simple de comprendre (mais cela peut être difficile à mettre en œuvre en fonction du cadre ou de la base que vous utilisez).

En bref, les sessions sont un moyen de maintenir l'état d'une application lors du chargement de pages..

Mais voici la chose: Cela peut être mis en œuvre de plusieurs façons. Dans un scénario, vous pouvez simplement écrire des données dans la base de données sur une page, puis les récupérer à la prochaine..

Ce n'est pas exactement le moyen le plus efficace de définir une session notamment si vous avez beaucoup d'utilisateurs actifs, mais Est-ce que vous permettent de maintenir l'état.

Là encore, ce n'est pas ce dont nous parlons lorsque nous parlons de sessions. Au lieu de cela, nous parlons de garder un ensemble d'informations persistantes en mémoire - littéralement, en RAM - tout au long du temps que l'utilisateur est actif sur le site Web..

Au risque d’être plus technique que je ne le souhaiterais dans cette série d’articles, sont façons dont les sessions sont gérées un peu différemment pour que vous puissiez quitter un site, revenir et conserver votre session active maintenue.

Pensez à des services tels que Twitter lorsque vous n'avez pas besoin de vous connecter chaque fois que vous visitez le site. Peu importe, les détails de cette la mise en œuvre dépasse le cadre de cette série.

Voyons plutôt à quoi pourrait ressembler une session, à partir du moment où un utilisateur apparaît sur la page d'accueil d'une application, s'est connecté, a ouvert une session, puis s'est déconnecté..

Chargement d'une application sans session

Alors, voici à quoi ressemble une application typique basée sur une base de données du point de vue de ne pas maintenir toutes les informations de session. Au lieu de cela, tout est fourni de manière statique sur les pages et / ou il est chargé à partir de la base de données:


Un exemple simple d'application Web sauvegardée dans une base de données.

Assez facile à comprendre, n'est-ce pas?

En gros, chaque fois qu'une page est chargée - ou chaque fois qu'un utilisateur accède à une nouvelle page - la page récupère les informations nécessaires à partir de la base de données et les présente ensuite à l'utilisateur..

Chargement d'une application avec une session

Si le diagramme ci-dessus montre à quoi ressemble une application Web sauvegardée dans une base de données sans aucun type de mécanisme de session, à quoi ça ressemble quand Est-ce que offrir un soutien pour les sessions?

Avant d'examiner un diagramme de ce à quoi cela ressemble, définissons les paramètres suivants:

  • L'application ne maintiendra aucune session pour les utilisateurs qui ne sont pas connectés
  • L'application va stocker certaines informations dans la session une fois que l'utilisateur est connecté
  • La session sera détruite lorsque l'utilisateur se déconnectera

En bref, cela signifie qu'une fois l'utilisateur connecté, certaines informations seront affichées à partir d'informations statiques, d'informations dans la base de données et d'informations stockées dans la session..


Un exemple simple d'application Web activée par session.

Rien de bien compliqué, hein?

En bref, les informations sont chargées dans une session stockée en mémoire et extraites de celle-ci en cas de besoin. D'autres informations qui ne sont pas en session mais qui sont pertinentes pour la page affichée seront extraites des données..

Si cela est correctement implémenté, vous pouvez réellement extraire beaucoup de performances d'une application et améliorer un peu l'expérience utilisateur globale; cependant, les détails de ce sont au-delà de cet article particulier.

Le point le plus important de cette section concerne le fonctionnement des sessions et les avantages qu’elles offrent..


La vérité sur WordPress et les sessions

Pour tous ceux qui ont travaillé à la création d'applications Web dans d'autres frameworks, vous connaissez probablement les sessions et leur fonctionnement dans le contexte des outils que vous utilisiez..

En fait, si vous avez déjà travaillé avec PHP, vous êtes probablement familiarisé avec le fonctionnement des sessions..

Mais voici un fait intéressant (au moins, je pense que c'est intéressant!):

L'application WordPress principale n'utilise pas de sessions.

En fait, l'utilisation d'un cookie généré lorsque vous vous connectez à l'application est la seule fois que vous conservez un type d'état..


Comment mettons-nous en œuvre les sessions?

Lorsqu'il s'agit d'implémenter des sessions dans WordPress, il s'agit davantage de comprendre comment implémenter une session en PHP et de s'assurer que vous faites le ménage adéquat, si nécessaire..

Concrètement, cela signifie que vous savez comment:

  • Commencer la session
  • Stocker des informations dans une session
  • Récupérer les informations de la session (et comment récupérer des informations de la base de données si elles ne sont pas dans une session)
  • Détruire la session

Cela semble assez simple, n'est-ce pas? Pour l’essentiel, c’est, mais comme pour la plupart des choses en développement, il y a des choses que nous devons considérer.

Commencer la session

La première chose à noter est que les sessions doivent être démarrées. Ceci est fait en appelant PHP session_start () une fonction.

Il y a deux choses à noter sur le démarrage d'une session en PHP:

  1. Vous voulez seulement démarrer une session s'il n'y a pas d'identifiant de session
  2. Vous devez démarrer une session avant qu'aucune information ne soit transmise au navigateur.

Pour ce faire, vous pouvez définir une fonction en utilisant un hook approprié mais doit être assez tôt dans le cycle de vie d'une page WordPress.

Aux fins de l'exemple de cet article, je vais commencer une session si un utilisateur est connecté. Si un utilisateur est connecté, nous enregistrerons l'heure à laquelle il s'est connecté; sinon, nous ne ferons rien.

Exemple: dans le code ci-dessous, je commence une session sous WordPress ' init action.

function exemple_login () if (! session_id () && is_user_logged_in ()) session_start ();  add_action ('init', 'example_login');

Maintenant, avec une session démarrée, nous pouvons réellement commencer à stocker des informations.

Informations sur la session en magasin

Travailler avec des données de session est très similaire à travailler avec des données stockées dans $ _GET, $ _POST, ou même dans un tableau associatif normal. En bref, PHP offre la $ _SESSION collection qui nous permet de stocker des informations via des paires clé / valeur.

En reprenant l'exemple ci-dessus, nous allons stocker l'heure actuelle à laquelle l'utilisateur s'est connecté. Notez cependant que doit vérifiez d'abord si la valeur est définie dans la collection; sinon, nous l'écraserons à chaque fois.

function exemple_login () if (! session_id () && is_user_logged_in ()) session_start (); if (! isset ($ _SESSION ['time']))) $ _SESSION ['time'] = time ();  add_action ('init', 'example_login');

Assez simple - d’abord, je vérifie si un ID de session() est défini et je vérifie si l'utilisateur est connecté. Si c'est le cas, enregistrez l'heure.

Mais maintenant, nous devons récupérer les informations de la session ailleurs dans la base de code..

Récupérer les informations de session

Tout comme lors du stockage d'informations dans des tableaux, nous pouvons récupérer les informations de la même manière, mais il y a une mise en garde: nous devons nous assurer que la valeur est définie dans le tableau. et que ce n'est pas vide.

Nous pouvons le faire en utilisant un simple conditionnel:

if (isset ($ _SESSION ['time'])) &&! empty ($ _SESSION ['time'])) print_r ($ _SESSION ['time']); 

En supposant que la valeur est présente dans le $ _SESSION collection, alors nous devrions être bons pour aller.

Détruire la session

Cela peut être fait lors de la déconnexion. En utilisant le code fourni, vous devriez voir une différence sur votre site si vous êtes connecté ou non..

Enfin, comme nous établissons une session lorsque l'utilisateur est connecté, nous souhaitons la détruire chaque fois que l'utilisateur se déconnecte. C'est relativement simple en utilisant PHP session_destroy () une fonction; cependant, il y a quelques nuances plus fines qui doivent être comprises.

Directement du manuel PHP:

session_destroy () détruit toutes les données associées à la session en cours. Il ne désactive pas les variables globales associées à la session, ni le cookie de session.

En bref, cela signifie que le mécanisme de persistance des informations de session est détruit, mais que les valeurs conservées dans la collection de sessions sont toujours conservées..

function exemple_logout () if (session_id ()) session_destroy ();  add_action ('wp_logout', 'example_logout');

Mais, encore une fois, comme avec d’autres tableaux et collections associatifs en PHP, vous pouvez réinitialiser ces valeurs (ou les écraser). Quoi qu'il en soit, cela dépasse le cadre de cette série.

Il y a des pièges!

Que serait un article sur la programmation sans une sorte de piège, à droite?

Premièrement, nous avons déjà établi que le noyau WordPress lui-même est sans état. Non seulement cela, mais il maintient également une fonction qui est utilisée pour réinitialiser les globaux (vous pouvez trouver cette fonction dans wp-includes / load.php - il suffit de chercher wp_unregister_GLOBALS).

En regardant le code source, vous remarquerez les lignes suivantes:

$ input = array_merge ($ _GET, $ _POST, $ _COOKIE, $ _SERVER, $ _ENV, $ _FILES, isset ($ _SESSION) && is_array ($ _SESSION)? $ _SESSION: array ()); foreach ($ input en tant que $ k => $ v) if (! in_array ($ k, $ no_unset) && isset ($ GLOBALS [$ k])) unset ($ GLOBALS [$ k]); 

Cela va annuler les valeurs dans la session, donc, dans un sens, WordPress peut réellement essayer de supprimer la session..

Deuxièmement, tous les hôtes Web ne prennent pas en charge les sessions PHP ou la $ _SESSION collection. Pour ce faire, vous devez vous assurer que l'environnement dans lequel vous déployez votre travail offre la configuration et le support nécessaires pour ce que vous publiez..

Qu'est-ce qu'un développeur à faire?

Donc, si vous craignez de devoir gérer beaucoup de code pour vous assurer que les sessions fonctionnent dans WordPress (et ne sont pas détruites), vous ne souhaitez pas non plus traiter des divers environnements d'hébergement et de leurs différentes configurations. , alors je recommande vivement de consulter le travail d'Eric Mann sur WP_Session.

Ce projet particulier sort du cadre de ce que nous essayons de couvrir ici dans cet article; Cependant, ce plugin vaut le détour car il fournit un génial couche de gestion de session pour WordPress sans beaucoup de la surcharge que nous avons couvert ici.


Les séances sont-elles importantes??

Tout d’abord, rappelez-vous que les sessions ne sont pas propres à WordPress. Ils sont une fonctionnalité de PHP que nous sommes en mesure de mettre en œuvre dans le le contexte de WordPress. Et à cette fin, nous sommes en mesure d'introduire des fonctionnalités vraiment cool basées sur les besoins des utilisateurs.

Mais cela soulève la question: les séances comptent-elles??

Je trouve cette question un peu subjective.

Si vous construisez une application Web dans laquelle chaque utilisateur doit parcourir le site avec des informations propres à sa session, telles que, par exemple, son prénom, son nom de famille, la dernière connexion, et d’autres fonctions amusantes, oui, je pense que vous avez un cas d'utilisation d'une session.

Mais si vous construisez quelque chose qui ne nécessite rien de plus qu'une authentification avant de restituer des informations à partir d'une base de données, je me demanderais alors si vous devez implémenter une session ou non..

Tout ça pour dire: ça dépend de la nature de votre projet.

À ce stade, nous sommes prêts à passer au prochain composant commun des applications Web: courrier électronique..

Plutôt que de compter sur PHP et de l'intégrer au cycle de vie de WordPress, l'API WordPress rend l'utilisation de la messagerie électronique relativement triviale et très puissante. Et avec cela, nous allons l'examiner dans le prochain article.