WordPress für die Entwicklung von Webanwendungen Sitzungen

In dieser Serie wird gezeigt, wie Sie mit WordPress Webanwendungen erstellen können.

Bisher haben wir darüber gesprochen, wie WordPress eine Basis (und nicht ein Framework) ist, seine Architektur und wie wir konzeptionell darüber nachdenken müssen, wenn wir uns dem Konzept nähern insbesondere Wir kamen aus anderen Sprachen und sprachen dann über die Komponenten, aus denen eine grundlegende Webanwendung besteht.

Zur Erinnerung haben wir erwähnt:

  • Benutzerverwaltung
  • Berechtigungen
  • Sitzungsmanagement
  • E-Mail-Funktionalität
  • Datenserialisierung und -abruf
  • URL-Routing (manchmal auch als URL-Umschreib- oder Umschreiberegeln oder auch nur als Route bezeichnet)
  • Caching
  • Unterstützung für benutzerdefinierte Abfragen

Und im letzten Beitrag haben wir sowohl die Benutzerverwaltung als auch die Berechtigungen behandelt.

In diesem Beitrag werden wir einen Blick auf die Einbindung von Sitzungen in eine WordPress-basierte Anwendung werfen. Wir gehen jedoch davon aus, dass Sie - oder andere Leser - überhaupt nicht mit Sitzungen vertraut sind.

Wir beginnen also mit einer allgemeinen Ansicht der Sitzungen, besprechen die Beziehung zwischen den Sitzungen und WordPress und erfahren dann, wie Sie Sitzungen in Ihre WordPress-basierte Anwendung integrieren.


Eine Einführung in die Sitzungen

Für diejenigen von Ihnen, die nicht mit dem Konzept von Sitzungen vertraut sind, ist dies relativ einfach zu verstehen (kann jedoch je nach verwendetem Framework oder Fundament schwierig zu implementieren sein)..

Kurz gesagt, Sitzungen sind eine Möglichkeit, den Status einer Anwendung über das Laden von Seiten hinweg aufrechtzuerhalten.

Aber hier ist die Sache: Dies kann auf verschiedene Arten implementiert werden. In einem Szenario könnten Sie einfach Daten auf einer Seite in die Datenbank schreiben und dann auf der nächsten abrufen.

Dies ist nicht gerade der effizienteste Weg, um eine Sitzung festzulegen insbesondere wenn Sie viele aktive Benutzer haben, aber es tut Erlaube dir, den Zustand aufrechtzuerhalten.

Andererseits reden wir hier nicht über Sessions. Stattdessen sprechen wir davon, dass ein Satz von Informationen dauerhaft im Arbeitsspeicher verbleibt - buchstäblich im Arbeitsspeicher -, solange der Benutzer auf der Website aktiv ist.

Auf die Gefahr hin, technischer zu werden, als ich mir in dieser Artikelserie gefallen würde sind So werden Sitzungen etwas anders verwaltet, so dass Sie eine Site verlassen, zurückkommen und Ihre aktive Sitzung trotzdem beibehalten können.

Denken Sie an Dienste wie Twitter, wenn Sie sich nicht anmelden müssen jeder Mal, wenn Sie die Site besuchen. Egal, die Details von Das Die Implementierung liegt außerhalb des Umfangs dieser Serie.

Lassen Sie uns stattdessen überlegen, wie eine Sitzung aussehen würde, nachdem ein Benutzer auf der Startseite einer Anwendung gelandet war, sich angemeldet hatte, eine Sitzung aufbaute und sich dann abmeldete.

Anwendung ohne Sitzung laden

So sieht eine typische datenbankgestützte Anwendung aus der Perspektive von aus nicht Pflege von Sitzungsinformationen. Stattdessen wird alles statisch auf Seiten bereitgestellt und / oder aus der Datenbank geladen:


Ein einfaches Beispiel für eine datenbankgestützte Webanwendung.

Ziemlich einfach zu verstehen, nicht wahr??

Grundsätzlich ruft die Seite jedes Mal, wenn eine Seite geladen wird oder wenn ein Benutzer zu einer neuen Seite navigiert, die erforderlichen Informationen aus der Datenbank ab und zeigt sie dem Benutzer an.

Eine Anwendung mit einer Sitzung laden

Wenn das obige Diagramm zeigt, wie eine datenbankgestützte Webanwendung ohne Sitzungsmechanismus aussieht, wie sieht sie dann aus? tut Support für Sitzungen anbieten?

Bevor wir uns ein Diagramm ansehen, wie es aussieht, stellen wir die folgenden Parameter dar:

  • Die Anwendung unterhält keine Sitzung für Benutzer, die nicht angemeldet sind
  • Die Anwendung speichert bestimmte Informationen in der Sitzung, sobald sich der Benutzer angemeldet hat
  • Die Sitzung wird zerstört, wenn sich der Benutzer abmeldet

Kurz gesagt bedeutet dies, dass, sobald der Benutzer angemeldet ist, einige Informationen aus statischen Informationen, Informationen in der Datenbank und in der Sitzung gespeicherten Informationen angezeigt werden.


Ein einfaches Beispiel für eine sitzungsaktivierte Webanwendung.

Nichts fürchterlich kompliziert, oder??

Kurz gesagt, Informationen werden in eine Sitzung geladen, die im Arbeitsspeicher gespeichert und bei Bedarf von dort abgerufen wird. Andere Informationen, die sich nicht in der Sitzung befinden, aber für die angezeigte Seite relevant sind, werden aus den Daten abgerufen.

Wenn dies erlaubt ist, wird dies richtig implementiert, Sie können eine Menge Leistung aus einer Anwendung herausholen und die Benutzererfahrung insgesamt etwas verbessern. Die Details dazu liegen jedoch außerhalb dieses Artikels.

Der wichtigste Aspekt dieses Abschnitts ist die Funktionsweise von Sitzungen und deren Vorteile.


Die Wahrheit über WordPress und Sitzungen

Für jeden, der mit dem Erstellen von Webanwendungen in anderen Frameworks gearbeitet hat, sind Sie wahrscheinlich mit Sitzungen und deren Funktionsweise im Zusammenhang mit den von Ihnen verwendeten Tools vertraut.

Wenn Sie bereits mit PHP gearbeitet haben, sind Sie wahrscheinlich auch mit der Funktionsweise von Sitzungen vertraut.

Aber hier ist eine interessante Tatsache (zumindest, ich finde es interessant!):

Die Kernanwendung von WordPress verwendet keine Sitzungen.

Tatsächlich ist der einzige Zeitpunkt, an dem ein Zustand nahezu erhalten bleibt, die Verwendung eines Cookies, das beim Anmelden bei der Anwendung generiert wird.


Wie implementieren wir Sitzungen??

Wenn Sie Sitzungen in WordPress implementieren möchten, müssen Sie eher wissen, wie Sie eine Sitzung in PHP implementieren, und sicherstellen, dass Sie bei Bedarf die richtige Hausreinigung durchführen.

Dies bedeutet insbesondere, dass Sie wissen, wie Sie:

  • Starten Sie die Sitzung
  • Speichern Sie Informationen in einer Sitzung
  • Abrufen der Informationen aus der Sitzung (und Informationen zum Abrufen von Informationen aus der Datenbank, wenn diese sich nicht in einer Sitzung befinden)
  • Zerstöre die Sitzung

Hört sich einfach an, nicht wahr? Meistens ist es aber so, wie bei den meisten Dingen in der Entwicklung gibt es Dinge, die wir berücksichtigen müssen.

Starten Sie die Session

Das erste, was Sie beachten müssen, ist, dass Sitzungen gestartet werden müssen. Dies geschieht durch den Aufruf von PHP session_start () Funktion.

Zum Starten einer Sitzung in PHP gibt es zwei Dinge zu beachten:

  1. Sie möchten eine Sitzung nur starten, wenn keine Sitzungs-ID vorhanden ist
  2. Sie müssen eine Sitzung starten, bevor Informationen an den Browser ausgegeben werden

Um dies zu tun, können Sie eine Funktion definieren, indem Sie jedoch einen entsprechenden Haken verwenden Muss Seien Sie früh genug im Lebenszyklus der WordPress-Seite.

Für das Beispiel dieses Artikels beginne ich eine Sitzung ob Ein Benutzer ist angemeldet. Wenn ein Benutzer angemeldet ist, speichern wir die Uhrzeit, zu der er sich angemeldet hat. sonst machen wir nichts.

Ein typisches Beispiel: Im folgenden Code beginne ich eine Sitzung während WordPress ' drin Aktion.

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

Jetzt können wir mit einer Sitzung beginnen, Informationen zu speichern.

Sitzungsinformationen speichern

Das Arbeiten mit Sitzungsdaten ähnelt dem Arbeiten mit Daten, die in gespeichert sind $ _GET, $ _POST, oder sogar in einem normalen assoziativen Array. Kurz gesagt, PHP bietet die $ _SESSION Sammlung, die es uns ermöglicht, Informationen über Schlüssel / Wert-Paare zu speichern.

Wenn Sie mit dem obigen Beispiel fortfahren, speichern wir die aktuelle Uhrzeit, zu der sich der Benutzer angemeldet hat. Beachten Sie jedoch, dass wir dies tun Muss Überprüfen Sie zunächst, ob der Wert in der Sammlung festgelegt ist. Andernfalls überschreiben wir es jedes Mal.

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

Einfach genug - zuerst überprüfe ich, ob a Session-ID() eingestellt ist und ich prüfe, ob der Benutzer angemeldet ist. Wenn ja, speichern Sie die Zeit.

Aber jetzt müssen wir die Informationen an anderer Stelle in der Codebase tatsächlich von der Sitzung abrufen.

Sitzungsinformationen abrufen

Genau wie beim Speichern von Informationen in Arrays können wir die Informationen auf die gleiche Weise abrufen, es gibt jedoch eine Einschränkung: Wir müssen sicherstellen, dass der Wert im Array festgelegt ist und dass es nicht leer ist.

Wir können dies mit einer einfachen Bedingung tun:

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

Angenommen, der Wert ist im vorhanden $ _SESSION Sammlung, dann sollten wir gut sein.

Zerstöre die Session

Dies kann beim Abmelden erfolgen. Wenn Sie den bereitgestellten Code verwenden, sollten Sie einen Unterschied auf Ihrer Website feststellen, je nachdem, ob Sie angemeldet sind oder nicht.

Da wir eine Sitzung einrichten, wenn der Benutzer angemeldet ist, möchten wir die Sitzung zerstören, wenn sich der Benutzer abmeldet. Dies ist mit PHP relativ einfach session_destroy () Funktion; Es gibt jedoch einige feinere Nuancen, die verstanden werden müssen.

Direkt aus dem PHP-Handbuch:

session_destroy () zerstört alle Daten, die der aktuellen Sitzung zugeordnet sind. Es löscht keine der mit der Sitzung verknüpften globalen Variablen oder das Sitzungscookie

Kurz gesagt bedeutet dies, dass der Mechanismus zum Beibehalten von Sitzungsinformationen zerstört wird, aber die Werte, die in der Sitzungssammlung gespeichert werden, bleiben erhalten.

Funktion example_logout () if (session_id ()) session_destroy ();  add_action ('wp_logout', 'example_logout');

Aber wie bei anderen assoziativen Arrays und Sammlungen in PHP können Sie diese Werte auch zurücksetzen (oder überschreiben). Unabhängig davon geht das über den Rahmen dieser speziellen Serie hinaus.

Es gibt einige Gotchas!

Was wäre ein Artikel über das Programmieren ohne irgendeine Art von Gechas, richtig??

Erstens haben wir bereits festgestellt, dass der WordPress-Kern selbst zustandslos ist. Nicht nur das, es unterhält auch eine Funktion, die zum Zurücksetzen von Globalen verwendet wird (diese Funktion finden Sie in wp-includes / load.php - schau einfach nach wp_unregister_GLOBALS).

Beim Betrachten des Quellcodes werden folgende Zeilen angezeigt:

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

Dadurch werden die Werte in der Sitzung zurückgesetzt. In einem gewissen Sinn versucht WordPress möglicherweise, die Sitzung zu löschen.

Zweitens unterstützen nicht alle Webhosts PHP-Sitzungen oder die $ _SESSION Sammlung. Zu diesem Zweck müssen Sie sicherstellen, dass die Umgebung, in der Sie Ihre Arbeit bereitstellen, die erforderliche Konfiguration und Unterstützung für das, was Sie veröffentlichen, bietet.

Was ist ein Entwickler??

Wenn Sie sich also Sorgen machen müssen, dass Sie viel Code verwalten müssen, um sicherzustellen, dass Sitzungen in WordPress funktionieren (und nicht in den Papierkorb geraten), und Sie sich auch nicht mit den verschiedenen Hosting-Umgebungen und ihren verschiedenen Konfigurationen beschäftigen möchten Dann empfehle ich Eric Manns Arbeit zu WP_Session.

Dieses spezielle Projekt liegt außerhalb des Rahmens dessen, was wir hier in diesem Artikel behandeln wollen. Dieses Plugin ist jedoch einen Besuch wert, da es eine enthält großartig Session Management-Schicht für WordPress ohne viel Aufwand, den wir hier behandelt haben.


Machen Sie sogar Sitzungen?

Erinnern Sie sich zunächst daran, dass Sitzungen nicht nur in WordPress enthalten sind. Sie sind eine Funktion von PHP, die wir in der implementieren können Kontext von WordPress. Zu diesem Zweck können wir einige wirklich coole Funktionen einführen, die auf den Bedürfnissen der Benutzer basieren.

Dies wirft jedoch die Frage auf, ob Sitzungen wichtig sind?

Ich finde diese Frage etwas subjektiv.

Wenn Sie eine Webanwendung erstellen, in der jeder Benutzer mit Informationen zu seiner Sitzung auf der Website navigieren muss, z. B. Vorname, Nachname, letzte Anmeldung und andere lustige Informationen, dann Ja, ich denke, Sie haben einen Grund, eine Sitzung zu benutzen.

Wenn Sie jedoch etwas erstellen, für das vor der Wiedergabe von Informationen aus einer Datenbank nichts weiter als eine Authentifizierung erforderlich ist, würde ich die Frage stellen, ob Sie eine Sitzung implementieren müssen oder nicht.

All dies zu sagen: Es hängt von der Art Ihres Projekts ab.

An dieser Stelle können wir zur nächsten gemeinsamen Komponente von Webanwendungen übergehen: E-Mail.

Anstatt sich auf PHP zu verlassen und es in den WordPress-Lebenszyklus einzubinden, macht die WordPress-API das Arbeiten mit E-Mails relativ einfach und wirklich mächtig. Und damit werden wir es im nächsten Artikel besprechen.