alcançando a implementação de login sem usar sessões


9

Wordpress não usa sessões.

Sempre me perguntei qual mecanismo o WP usa para manter um estado de usuário quando o usuário passa de uma página para outra.

Respostas:


12

Ele usa cookies simples e armazena o lado do cliente com informações de estado de login.

insira a descrição da imagem aqui

+

insira a descrição da imagem aqui

=

wordpress_7339a175323c25a8547b5a6d26c49afa = seu nome de usuário% 7C1457109155% 7C170f103ef3dc57cdb1835662d97c1e13;

De onde vêm todos esses biscoitos e sal?

O salt está no seu arquivo 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');

As frases exclusivas são usadas em uma função hash criptográfica

O cookie de autenticação, cujo nome é armazenado dentro de AUTH_COOKIE, formado pela concatenação de "wordpress_" com a soma md5 do siteurl definida em default-constants.php. Esse é o comportamento padrão e pode ser substituído de dentro do seu arquivo de configuração, configurando algumas das constantes antecipadamente.

O cookie de autenticação é uma concatenação do nome de usuário, um carimbo de data e hora até o qual o cookie de autenticação é válido. E um HMAC, que é uma espécie de hash com distorção de chave para aqueles que obtiveram um TL; DR no momento. As três variáveis ​​são concatenadas com o caractere de barra |.

Aqui está como o HMAC é construído:

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

Isso é seguro?

De acordo com este artigo, de onde a maioria das informações contidas nesta resposta levaria cerca de uma semana para um hacker ter força bruta no envio de 30 solicitações por segundo se soubessem qual era sua frase única e 200.000.000.000.000.000.000.000.000.000.000.000 de vezes mais se suas chaves fossem únicas.


Chris. As sessões não são exatamente iguais? As sessões exigem um cookie no site do cliente e o servidor usa isso para identificar com qual usuário ele está lidando. Não vejo qual a diferença entre uma implementação baseada em sessão e isso.
Média de Joe

2
De repente estou com fome.
Kevin

2
As sessões PHP armazenam e rastreiam informações de login dentro da super global $ _SESSION. Uma sessão expira quando você fecha o navegador. O cookie de autenticação do WordPress dura dias muito mais longos ou até semanas. Veja: tuxradar.com/practicalphp/10/1/0
Chris_O

0

Os cookies são apenas o armazenamento do cliente dos dados da sessão ... Cookies do WordPress

De fato, pode-se ter cookies sem sessões, mas nenhuma sessão sem cookies.


Receio que você esteja errado nisso. O wordpress não usa sessões.
Média de Joe

Os cookies PHP fazem parte das sessões PHP - mesmo que o WP provavelmente não utilize sessões do lado do servidor para armazenamento de dados da sessão (para ser compatível com algumas hospedagens compartilhadas ruins).
Martin Zeitler

Não tenho certeza do que você quer dizer com isso. Para usar sessões em php, você precisa habilitar sessões na parte superior da sua página usando session_start()explicitamente. Agora, obviamente, o wordpress não tem session_start()nenhum lugar em seu núcleo. Veja onde estou ficando confuso com seu último comentário?
Média Joe

São apenas os princípios básicos das sessões PHP ... que session_start () habilita o armazenamento no servidor, enquanto setcookie () habilita o armazenamento no cliente dos dados da sessão. Talvez apenas se livre da ideia de que sessões e cookies são algo completamente diferente - a única diferença real é o local de armazenamento.
Martin Zeitler 28/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.