ottenere l'implementazione del login senza usare le sessioni


9

Wordpress non utilizza sessioni.

Mi sono sempre chiesto quale meccanismo utilizza WP per mantenere uno stato utente quando l'utente passa da una pagina all'altra?

Risposte:


12

Utilizza cookie non elaborati e memorizza il lato client delle informazioni sullo stato di accesso.

inserisci qui la descrizione dell'immagine

+

inserisci qui la descrizione dell'immagine

=

wordpress_7339a175323c25a8547b5a6d26c49afa = yourusername% 7C1457109155% 7C170f103ef3dc57cdb1835662d97c1e13;

Da dove provengono tutti questi biscotti e sale?

Il sale è nel tuo file 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');

Le frasi uniche sono utilizzate in una funzione hash crittografica

Il cookie di autenticazione, il cui nome è memorizzato all'interno di AUTH_COOKIE, che si forma concatenando "wordpress_" con la somma md5 del siteurl impostata in default-constants.php. Questo è il comportamento predefinito e può essere sostituito dall'interno del file di configurazione, impostando alcune costanti in anticipo.

Il cookie di autenticazione è una concatenazione del nome utente, un timestamp fino al quale il cookie di autenticazione è valido. E un HMAC, che è una specie di hash distorto dalla chiave per coloro che hanno estratto un TL; DR in questo momento. Le tre variabili sono concatenate con il carattere pipe |.

Ecco come è costruito l'HMAC:

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

È sicuro?

Secondo questo articolo in cui la maggior parte delle informazioni in questa risposta provengono, ci vorrebbe un hacker circa una settimana per forzare la forza nell'inviare 30 richieste al secondo se sapessero qual è la tua frase unica e 200.000.000.000.000.000.000.000.000.000.000.000 di volte più difficili se le tue chiavi sono uniche.


Chris. Le sessioni non fanno esattamente la stessa cosa? Le sessioni richiedono un cookie sul sito client e il server lo utilizza per identificare l'utente con cui ha a che fare. Non vedo quale sia la differenza tra un'implementazione basata su sessione e questa.
Media Joe,

2
Improvvisamente ho fame.
Kevin,

2
Le sessioni PHP memorizzano e tengono traccia delle informazioni di accesso all'interno del super globale $ _SESSION. Una sessione scade alla chiusura del browser. Il cookie di WordPress Auth dura per giorni molto più lunghi o addirittura settimane. Vedi: tuxradar.com/practicalphp/10/1/0
Chris_O,

0

I cookie sono solo l'archiviazione sul lato client dei dati di sessione ... Cookie di WordPress

In effetti, si possono avere cookie senza sessioni, ma nessuna sessione senza cookie.


Temo che ti sbagli di grosso. wordpress non usa affatto le sessioni.
Media Joe,

I cookie PHP fanno parte delle sessioni PHP, anche se probabilmente WP potrebbe non utilizzare sessioni lato server per l'archiviazione dei dati di sessione (al fine di essere compatibile con alcuni hosting condivisi scadenti).
Martin Zeitler,

Non sono sicuro di cosa tu voglia dire. Per usare le sessioni in php, devi abilitare le sessioni nella parte superiore della tua pagina usando session_start()esplicitamente. Ora, ovviamente, wordpress non ha da session_start()nessuna parte nel suo nucleo. Vedi dove mi confondo il tuo ultimo commento?
Media Joe,

Sono solo i principi di base delle sessioni PHP ... che session_start () abilita l'archiviazione sul lato server mentre setcookie () abilita l'archiviazione sul lato client dei dati della sessione. Forse basta sbarazzarsi dell'idea che sessioni e cookie siano qualcosa di completamente diverso: l'unica vera differenza è la posizione di archiviazione.
Martin Zeitler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.