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

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 раз сложнее, если ваши ключи уникальны.

Chris_O
источник
Крис. Разве сессии не делают то же самое? Для сеансов требуется файл 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 () включает хранение данных сеанса на стороне клиента. Может быть, просто избавиться от идеи, что сессии и куки - это нечто совершенно другое - единственное реальное отличие - это место хранения.
Мартин Цайтлер,