реализация входа в систему без использования сессий


9

Wordpress не использует сессии.

Мне всегда было интересно, какой механизм WP использует для поддержания состояния пользователя, когда пользователь переходит со страницы на страницу?

Ответы:


12

Он использует пустые файлы cookie и сохраняет информацию о состоянии входа в систему на стороне клиента.

введите описание изображения здесь

+

введите описание изображения здесь

знак равно

wordpress_7339a175323c25a8547b5a6d26c49afa = имя_пользователь% 7C1457109155% 7C170f103ef3dc57cdb1835662d97c1e13;

Откуда все эти печенье и соль?

Соль находится в вашем файле 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');

Уникальные фразы используются в криптографической хэш-функции

Файл cookie аутентификации, имя которого хранится внутри AUTH_COOKIE, который формируется путем объединения «wordpress_» с суммой md5 siteurl, установленной в default-constants.php. Это поведение по умолчанию, которое может быть переопределено внутри вашего файла конфигурации, предварительно настроив некоторые из констант.

Файл cookie аутентификации - это объединение имени пользователя, временной метки, до которой файл cookie аутентификации является действительным, и HMAC, который является своего рода хэшем с привязкой к ключу для тех, кто сейчас использует TL; DR. Три переменные объединяются с символом канала |.

Вот как построен HMAC:

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

Это безопасно?

Согласно этой статье, откуда взялась большая часть информации в этом ответе, хакеру понадобится около недели, чтобы грубо заставить отправлять 30 запросов в секунду, если они знают, какая у вас уникальная фраза, и в 200 000 000 000 000 000 000 000 000 000 000 раз сложнее, если ваши ключи уникальны.


Крис. Разве сессии не делают то же самое? Для сеансов требуется файл cookie на клиентском сайте, а сервер использует его для определения того, с каким пользователем он имеет дело. Я не вижу, в чем разница между реализацией на основе сеанса и этим.
Средний Джо

2
Я вдруг голоден.
Кевин

2
PHP Sessions хранит и отслеживает регистрационную информацию внутри суперглобальной переменной $ _SESSION. Сессия истекает, когда вы закрываете браузер. Файл cookie WordPress Auth длится гораздо дольше или даже неделями. См .: tuxradar.com/practicalphp/10/1/0
Chris_O

0

Файлы cookie - это просто хранилище данных сеанса на стороне клиента ... Файлы cookie WordPress

На самом деле, файлы cookie могут быть без сеансов, а сеансы без файлов cookie.


Я боюсь, что вы абсолютно не правы в этом. WordPress не использует сессий вообще.
Средний Джо

Файлы cookie PHP являются частью сеансов PHP - даже если WP, возможно, может не использовать сеансы на стороне сервера для хранения данных сеансов (для того, чтобы быть совместимыми с некоторыми хреновыми общими хостингами).
Мартин Цейтлер

Я не уверен, что вы подразумеваете под этим. Чтобы использовать сеансы в php, вы должны включить сеансы в верхней части своей страницы, используя session_start()явно. Теперь, очевидно, WordPress не имеет session_start()нигде в своем ядре. Видите, где я запутался в вашем последнем комментарии?
Средний Джо

Это просто базовые принципы PHP-сессий ... что session_start () включает хранение на стороне сервера, а setcookie () включает хранение данных сеанса на стороне клиента. Может быть, просто избавиться от идеи, что сессии и куки - это нечто совершенно другое - единственное реальное отличие - это место хранения.
Мартин Цайтлер,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.