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:
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.
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.
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:
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.
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:
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.
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.
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.
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:
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.
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:
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.
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.
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.
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.
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.
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.
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.