Si je devais le faire, j'utiliserais mon propre cookie pour déterminer la connexion et ne chargerais WordPress que pour vérifier si nécessaire.
Le cookie wordpress_logged_in_ {some-hash} peut être utilisé pour déterminer l'utilisateur, et WordPress l'utilise pour le déterminer. Vous ne pouvez pas facilement réimplémenter cela, mais vous pouvez l'utiliser sans charger WordPress sur plusieurs demandes.
Par exemple, voici mon hachage de cookie (données entièrement constituées, mais réalistes):
key: wordpress_logged_in_1234567890abcdef1234567890abcdef
value: admin|1234567890|abcdef1234567890abcdef1234567890
La façon dont WordPress sait comment ce cookie est valide n'est pas pertinente, tout ce que vous devez savoir est de savoir s'il est valide une fois, puis vous le signez avec un secret.
Donc, la première fois, l'utilisateur n'a pas encore fait ses preuves. Vous chargez wp-load.php et WP valide le cookie et connecte l'utilisateur. Vous faites maintenant tout ce que vous faites pour vous prouver que l'utilisateur a été connecté, puis vous définissez votre propre cookie. La clé peut être quelque chose de personnalisé pour vous, la valeur que vous faites dans un résumé de message avec une clé secrète en utilisant la fonction hash_hmac.
$key = ... // the key from the WP cookie
$value = ... // the value from the WP cookie
$hash = hash_hmac ( 'md5' , $key.$value , 'some secret key' );
Vous récupérerez du charabia, que vous leur renvoyez en utilisant setcookie (). Lors de futures demandes, ils vous renverront ce cookie. Vous pouvez d'abord vérifier cela et le valider en utilisant la même fonction de hachage et la même clé secrète.
Vous seul pouvez générer le hachage car vous seul connaissez la clé secrète. Donc, s'ils renvoient un hachage valide qui correspond également à ce qu'ils envoient pour leur cookie WP, vous savez qu'ils ont déjà été validés avec WP, via votre code, et vous pouvez obtenir le nom d'utilisateur directement à partir de cette valeur (c'est le premier partie du cookie, évidemment). Ensuite, vous n'avez pas à charger WP.
La clé secrète, BTW, doit être longue et aléatoire . Pas un mot de passe court. Pas un mot du dictionnaire. Juste un gros charabia absurde. Du bruit de ligne, et beaucoup. Exemple de clé:
'GHY5hFNqq4Ntdu=3:SUp8#/+_W!- @@^@xslN*L|N+Vn;(1xo8jNyp,au$v9Ki5*'
Pour Wordpress 4.9: Comme je ne peux pas commenter (nouvel utilisateur). La soultion finale (installation WP unique) que j'utilise pour la création
is_user_logged_in()
et lecurrent_user_can()
travail, est la suivante. Nous commençons d'require('wp-load.php')
abord (pour sauter wp () dans load-blog-header.php) , et obtenonsABSPATH
ensuite une constante, en incluant manuellement exactement tout le nécessaire.L'utilisation manuelle de
define('SHORTINIT', true)
+require('wp-load.php')
+ comprend:Pageload: 1.05 sek - fichiers inclus: 43 fichiers
Comparer: en utilisant UNIQUEMENT
require('wp-load.php')
:Pageload: 1.35 sek - fichiers inclus: 419 fichiers
La différence de temps (0,3 sek) peut différer des installations et des moteurs PHP, mais tout en validant de nombreuses demandes sur un seul chargement de page, cela s'ajoute!
N'oubliez pas d'utiliser l'appel relatif au répertoire installé WP. À partir d'un répertoire de plug-in personnalisé Wordpress, à l'intérieur d'un niveau de sous-répertoire, installation normale, un chemin doit être comme:
Puis:
Après cela, la validation de l'utilisateur est accessible. Pour une autre tâche, rning sur une ou deux demandes , la recherche d'autres fichiers nécessaires peut ne pas valoir 0,3 sek. Sautez l'
SHORTINIT
encombrement constant et manuel.la source
Wordpress lui-même est uniquement activé ou désactivé. Parfois, mais ce n'est que par hasard et non par conception, vous pouvez contourner cela. Mais dans votre cas, je ne sais pas vraiment si c'est possible.
Au lieu de
wp-blog-header.php
vous pouvez essayer de ne charger que les fonctions WP, incluezwp-load.php
plutôt. Peut-être que cela aide.la source
wp-blog-header.php
charge essentiellementwp-load.php
donc il n'y a pas de différence ...wp();
qui est en fait assez chère.wp-load.php
au lieu dewp-blog-header.php
, tout semble bien fonctionner mais le temps de chargement est le même.Vous pouvez essayer d'accéder directement à la table. Si vous connaissez le sel des fichiers de mot de passe, vous pouvez les faire vous connecter via votre propre système, salez le mot de passe vous-même (regardez comment wordpress le fait) et gardez une trace d'eux. Si vous souhaitez pouvoir passer de votre propre système à wordpress sans réauthentification, vous pouvez créer un plugin pour wordpress qui transmet la session des utilisateurs en cours à votre système.
la source
Le plus rapide que vous pouvez obtenir avec WP est de créer un wrapper personnalisé qui définira
SHORTINIT
puis chargera le noyau. Cela entraînera l'arrêt de la charge principale juste après la connexion de la base de données et avant le traitement de la plupart des API et extensions (thème et plug-ins).De là, vous pouvez essayer d'obtenir uniquement par base de données ou charger de manière sélective les parties du noyau dont vous avez besoin.
C'est une approche assez compliquée, mais elle est aussi proche d'une charge de base plus légère que les choses dans WP.
la source
Il semble qu'il y ait déjà eu une discussion à ce sujet. Alors, vérifiez les mises à jour sur: https://core.trac.wordpress.org/ticket/37584
la source
Si vous souhaitez simplement autoriser tous les utilisateurs de Wordpress à utiliser l'application Web, vous pouvez utiliser le système de gestion des utilisateurs de Wordpress et vérifier simplement si l'utilisateur est connecté ou non.
Pour vérifier cela, vous devrez vérifier si le cookie nommé
wordpress_logged_in_{some-hash}
est présent. Sinon, redirigez l'utilisateur vers la page de connexion de Wordpress. La{some-hash}
partie du nom du cookie n'est qu'une série de lettres et de chiffres.la source