réaliser l'implémentation de la connexion sans utiliser de sessions

9

Wordpress n'utilise pas de sessions.

Je me suis toujours demandé quel mécanisme WP utilise-t-il pour maintenir un état d'utilisateur lorsque l'utilisateur passe d'une page à l'autre?

Moyenne Joe
la source

Réponses:

12

Il utilise des cookies nus et stocke le côté client des informations d'état de connexion.

entrez la description de l'image ici

+

entrez la description de l'image ici

=

wordpress_7339a175323c25a8547b5a6d26c49afa = votre nom d'utilisateur% 7C1457109155% 7C170f103ef3dc57cdb1835662d97c1e13;

D'où viennent tous ces biscuits et ce sel?

Le sel se trouve dans votre fichier wp-config.php:

/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

Les phrases uniques sont utilisées dans une fonction de hachage cryptographique

Le cookie d'authentification, dont le nom est stocké dans AUTH_COOKIE, qui est formé en concaténant "wordpress_" avec la somme md5 de l'ensemble siteurl dans default-constants.php. Il s'agit du comportement par défaut et peut être remplacé à l'intérieur de votre fichier de configuration, en configurant certaines des constantes à l'avance.

Le cookie d'authentification une concaténation du nom d'utilisateur, un horodatage jusqu'à ce que le cookie d'authentification soit valide et un HMAC, qui est en quelque sorte un hachage biaisé pour ceux qui ont retiré un TL; DR en ce moment. Les trois variables sont concaténées avec le caractère pipe |.

Voici comment le HMAC est construit:

$hash = hash_hmac('md5', $username . '|' . $expiration, wp_hash($username . substr($user->user_pass, 8, 4) . '|' . $expiration, $scheme));

Est-ce sécurisé?

Selon cet article d' où proviennent la plupart des informations contenues dans cette réponse, il faudrait environ une semaine à un pirate informatique pour envoyer 30 requêtes par seconde s'il savait quelle était votre phrase unique et 200 000 000 000 000 000 000 000 000 000 000 000 fois plus si vos clés sont uniques.

Chris_O
la source
Chris. Les sessions ne font-elles pas exactement la même chose? Les sessions nécessitent un cookie sur le site client et le serveur l'utilise pour identifier l'utilisateur avec lequel il traite. Je ne vois pas quelle est la différence entre une implémentation basée sur une session et cela.
Moyenne Joe
2
J'ai soudainement faim.
Kevin
2
Les sessions PHP stockent et suivent les informations de connexion dans le super global $ _SESSION. Une session expire lorsque vous fermez votre navigateur. Le cookie WordPress Auth dure des jours voire des semaines beaucoup plus longs. Voir: tuxradar.com/practicalphp/10/1/0
Chris_O
0

Les cookies ne sont que le stockage côté client des données de session ... Cookies WordPress

En fait, on peut avoir des cookies sans sessions, mais pas de sessions sans cookies.

Martin Zeitler
la source
J'ai bien peur que vous vous trompiez. wordpress n'utilise pas du tout les sessions.
Moyenne Joe
Les cookies PHP font partie des sessions PHP - même si WP ne peut probablement pas utiliser de sessions côté serveur pour le stockage des données de session (afin d'être compatible avec certains hébergements partagés merdiques).
Martin Zeitler
Je ne sais pas ce que tu veux dire par là. Pour utiliser les sessions en php, vous devez activer les sessions en haut de votre page en utilisant session_start()explicitement. Maintenant, évidemment, wordpress n'a session_start()nulle part dans son noyau. Vous voyez où je suis confus par votre dernier commentaire?
Moyenne Joe
Ce ne sont que les principes de base des sessions PHP ... que session_start () active le stockage côté serveur tandis que setcookie () permet le stockage côté client des données de session. Débarrassez-vous peut-être de l'idée que les sessions et les cookies sont quelque chose de complètement différent - la seule vraie différence est l'emplacement de stockage.
Martin Zeitler