realizacja logowania bez korzystania z sesji

9

Wordpress nie korzysta z sesji.

Zawsze zastanawiałem się, jakiego mechanizmu używa WP do utrzymania stanu użytkownika, gdy użytkownik przechodzi ze strony na stronę?

Przeciętny Joe
źródło

Odpowiedzi:

12

Wykorzystuje nagie pliki cookie i przechowuje informacje o stanie logowania po stronie klienta.

wprowadź opis zdjęcia tutaj

+

wprowadź opis zdjęcia tutaj

=

wordpress_7339a175323c25a8547b5a6d26c49afa = nazwa użytkownika% 7C1457109155% 7C170f103ef3dc57cdb1835662d97c1e13;

Skąd pochodzą te wszystkie ciasteczka i sól?

Sól znajduje się w pliku 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');

Unikalne frazy są używane w funkcji skrótu kryptograficznego

Ciasteczko uwierzytelniające, którego nazwa jest przechowywana w AUTH_COOKIE, które powstaje przez połączenie „wordpress_” z sumą md5 siteurl ustawioną w default-constants.php. Jest to zachowanie domyślne i można je zastąpić w pliku konfiguracyjnym, ustawiając niektóre stałe z góry.

Ciasteczko uwierzytelniające jest konkatenacją nazwy użytkownika, znacznikiem czasu, do którego plik cookie uwierzytelniania jest ważny. Oraz HMAC, który jest swego rodzaju skrótem kluczowym dla tych, którzy wyciągnęli TL; DR w tej chwili. Trzy zmienne są powiązane ze znakiem potoku |

Oto jak zbudowany jest HMAC:

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

Czy to jest bezpieczne?

Zgodnie z tym artykułem, skąd pochodzi większość informacji zawartych w tej odpowiedzi, włamanie do hakera zajęłoby około tygodnia wysyłanie 30 próśb na sekundę, gdyby wiedzieli, co to jest Twoja wyjątkowa fraza i 200 000 000 000 000 000 000 000 000 000 000 000 razy więcej, jeśli twoje klucze są unikalne.

Chris_O
źródło
Chris. Czy sesje nie są dokładnie takie same? Sesje wymagają plików cookie w witrynie klienta, a serwer używa ich do identyfikowania użytkownika, z którym ma do czynienia. Nie widzę różnicy między implementacją opartą na sesji a tym.
Średnia Joe
2
Nagle jestem głodna.
Kevin
2
Sesje PHP przechowują i śledzą dane logowania w super globalnej $ _SESSION. Sesja wygasa po zamknięciu przeglądarki. Plik cookie WordPress Auth trwa znacznie dłużej, a nawet tygodnie. Zobacz: tuxradar.com/practicalphp/10/1/0
Chris_O
0

Pliki cookie to tylko przechowywanie danych sesji po stronie klienta ... Pliki cookie WordPress

W rzeczywistości można mieć pliki cookie bez sesji, ale żadnych sesji bez plików cookie.

Martin Zeitler
źródło
Obawiam się, że nie masz racji. wordpress w ogóle nie używa sesji.
Średnia Joe
Ciasteczka PHP są częścią sesji PHP - nawet jeśli WP prawdopodobnie nie wykorzystuje sesji po stronie serwera do przechowywania danych sesji (aby być kompatybilnym z niektórymi kiepskimi udostępnianymi hostami).
Martin Zeitler
Nie jestem pewien, co przez to rozumiesz. Aby korzystać z sesji w php, musisz włączyć sesje u góry strony, używając session_start()jawnie. Teraz, oczywiście, wordpress nie ma session_start()nigdzie w swoim rdzeniu. Widzisz, gdzie jestem zaskoczony twoim ostatnim komentarzem?
Średnia Joe
To tylko podstawowe zasady sesji PHP ... session_start () umożliwia przechowywanie po stronie serwera, podczas gdy setcookie () umożliwia przechowywanie danych sesji po stronie klienta. Może po prostu pozbyć się pomysłu, że sesje i pliki cookie to coś zupełnie innego - jedyną prawdziwą różnicą jest miejsce przechowywania.
Martin Zeitler