Ich möchte meine Website mit WordPress integrieren. Ich möchte wissen, wie ich WordPress-Cookies lesen kann, damit ich Benutzer auf meiner Website nicht erneut authentifizieren muss. Ich habe versucht, die Header-Datei von WordPress in meine Website aufzunehmen, aber dann war ich Ich kann keine Verbindung zur Datenbank meiner Website herstellen. Beide sind unterschiedlich. Kann ich zusätzliche Parameter von Cookies wie Benutzerebene usw. festlegen? Meine Website ist in PHP geschrieben.
Wie kann ich WordPress-Cookies auf meiner Website lesen?
Thomas Guillory
Fügen Sie auf Ihrer Website diesen Code oben in jeder Datei ein:
<?php
define('WP_USE_THEMES', false);
require('./blog/wp-blog-header.php');
?>
…vorausgesetzt, Ihr Blog ist da ./blog/
.
Es enthält den gesamten WordPress-Stack. Sie haben Zugriff auf alle WordPress-Funktionen in Ihrem Code. Damit können Sie ganz einfach überprüfen, ob der Benutzer angemeldet ist, Rollen und Fähigkeiten, aber auch Beiträge abrufen oder so.
Dann in Ihrem Code, um den Benutzer zu überprüfen:
if (is_user_logged_in()) { ... }
Sie können auch einen Abmeldelink einfügen:
<a href="https://stackoverflow.com/questions/9350265/<?php bloginfo("url"); ?>/wp-login.php?action=logout/">Logout</a>
Wenn sich Ihr Blog und Ihre Website nicht auf derselben Domain oder Subdomain befinden, müssen Sie die Cookie-Domain anpassen wp-config.php
define('COOKIE_DOMAIN', '.domain.com'); // Share cookie on all subdomains
BEARBEITEN
Wenn Sie wirklich nur die WordPress-Cookies lesen möchten (was eine gute Wahl für die Leistung ist): Der Cookie-Name wird in einer Konstante AUTH_COOKIE gespeichert.
AUTH_COOKIE ist definiert in /wp-includes/default-constants.php -> line 171
wie
"wordpress_" + md5( get_site_option(siteurl) )
Sie müssen AUTH_COOKIE abrufen oder neu berechnen und dann $_COOKIE lesen[AUTH_COOKIE].
Um es zu analysieren, schauen Sie sich an wp_parse_auth_cookie()
in wp-includes/pluggable.php @line 585
(Tatsächlich ist das Format einfach user|expiration|hmac
Also spalte die Kette auf |
und bekomme das erste Element)
-
Aber wenn ich den WordPress-Header in meine Website-Seiten einfüge, kann ich keine Verbindung zu meiner eigenen Datenbank herstellen. Website und Blog befinden sich in derselben Domain. Gibt es eine Möglichkeit, das Cookie zu lesen, ohne den Header zu verwenden?
– go_ku
19. Februar 2012 um 17:01 Uhr
-
Es gibt keinen Grund, warum Sie sich nicht mit Ihrer DB verbinden können, es sei denn, Ihr Hosting-Provider beschränkt Ihre DB-Verbindung. Ich bezweifle, da Sie sagen, dass dies zwei verschiedene DB sind. Aber siehe meine Bearbeitung für den anderen Weg …
–Thomas Guillory
19. Februar 2012 um 17:59 Uhr
-
@Artimuz Ich verwende jquery uploadify, um Dateien von einer WordPress-Seite hochzuladen. Ich habe es erstmal mit versucht
include_once '../../../../wp-load.php';
dann mit dem von dir empfohlenen Code, aber immerhinis_user_logged_in()
gibt falsch zurück. Für mich sieht es eher nach einem WordPress-Bug aus.– Adrian7
13. März 2012 um 8:48 Uhr
-
tippte das Uploadify-PHP-Skript im Browser ein, und es funktionierte … also schätze, es ist irgendwo ein Uploadify-Bug.
– Adrian7
13. März 2012 um 8:58 Uhr
-
Ich habe eine Lösung unter stackoverflow.com/questions/40146667/… gepostet, die hilfreich sein könnte, wenn Sie die Dinge für 1,05 Sekunden einfacher machen möchten.
– Anna Ericsson
25. Oktober 2018 um 9:53 Uhr
Damit Cookies in WordPress funktionieren, müssen Sie es auf eine spezielle Weise wie in der functions.php einstellen
function set_newuser_cookie() {
if (!isset($_COOKIE['sitename_newvisitor'])) {
setcookie('sitename_newvisitor', 1, time()+1209600, COOKIEPATH, COOKIE_DOMAIN, false);
}
}
add_action( 'init', 'set_newuser_cookie');
Der wichtige Punkt ist also
setcookie('sitename_newvisitor', 1, time()+1209600, COOKIEPATH, COOKIE_DOMAIN, false);
Es bekommen
if (isset($_COOKIE['sitename_newvisitor'])) {
echo 'Welcome back!';
}
else {
echo 'Hello new visitor!';
}
Notiz: Sie können den Cookie-Namen „sitename_newvisitor“, den Wert, die Zeitüberschreitung, den COOKIEPATH und die COOKIE_DOMAIN an Ihre Bedürfnisse anpassen
Das Einbinden der WP-Header-Datei ist wahrscheinlich der beste Weg. Ich würde empfehlen, das Kompatibilitätsproblem erneut zu untersuchen – es sollte möglich sein, eine WP-DB-Verbindung und eine andere Verbindung im selben Skript zu haben.
– Pekka
19. Februar 2012 um 15:00 Uhr
Betreibt Ihre Website dieselbe (Sub-)Domain wie die WP-Site? Wenn ja, schauen Sie einfach in das $_COOKIE-Array und die WP-Cookies werden dort sein. Wenn Sie sich auf einer anderen Domain befinden, ist es viel komplizierter.
– Halber
19. Februar 2012 um 15:01 Uhr