세션을 사용하지 않고 로그인 구현


9

워드 프레스는 세션을 사용하지 않습니다.

WP가 사용자가 페이지를 이동할 때 사용자 상태를 유지하기 위해 어떤 메커니즘을 사용하는지 항상 궁금했습니다.

답변:


12

베어 쿠키를 사용하고 로그인 상태 정보 클라이언트 측을 저장합니다.

여기에 이미지 설명을 입력하십시오

+

여기에 이미지 설명을 입력하십시오

=

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');

고유 문구는 암호화 해시 함수 에서 사용됩니다

이름이 AUTH_COOKIE 내에 저장되는 인증 쿠키는 default-constants.php에 설정된 siteurl의 md5 합계와 "wordpress_"를 연결하여 형성됩니다. 이것은 기본 동작이며 일부 상수를 미리 설정하여 구성 파일 내부에서 재정의 할 수 있습니다.

인증 쿠키는 사용자 이름, 인증 쿠키가 유효 할 때까지의 타임 스탬프, 그리고 TL; DR을 뽑은 사람들을위한 일종의 키 바이어스 해시 인 HMAC를 연결합니다. 세 개의 변수는 파이프 문자 |와 연결됩니다.

HMAC 구성 방법은 다음과 같습니다.

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

안전한가요?

이 답변의 대부분의 정보가 나온 이 기사 에 따르면 고유 한 문구가 무엇인지 알고 키가 고유하면 200,000,000,000,000,000,000,000,000,000,000 배 더 어려울 경우 초당 30 건의 요청을 보내는 데 약 1 주일 정도의 해킹이 필요합니다.


크리스 세션이 정확히 동일하지 않습니까? 세션에는 클라이언트 사이트에 쿠키가 필요하며 서버는 쿠키를 사용하여 처리중인 사용자를 식별합니다. 세션 기반 구현과 이것의 차이점이 무엇인지 알 수 없습니다.
평균 Joe

2
나는 갑자기 배가 고프다.
Kevin

2
PHP 세션은 $ _SESSION super global에 로그인 정보를 저장하고 추적합니다. 브라우저를 닫으면 세션이 만료됩니다. 워드 프레스 인증 쿠키는 훨씬 더 오래 또는 몇 주 동안 지속됩니다. 참조 : tuxradar.com/practicalphp/10/1/0
Chris_O

0

쿠키는 세션 데이터의 클라이언트 측 저장 장치입니다. WordPress Cookies

실제로, 세션없이 쿠키를 가질 수 있지만 쿠키없이 세션을 가질 수는 없습니다.


나는 당신이 그것에 틀렸다는 것을 두려워합니다. 워드 프레스는 세션을 전혀 사용하지 않습니다.
평균 Joe

PHP 쿠키는 PHP 세션의 일부입니다. WP가 아마도 세션 데이터 저장을 위해 서버 측 세션을 사용하지 않을 수도 있습니다 (일부 크 래피 공유 호스팅과 호환되기 위해).
Martin Zeitler

그게 무슨 뜻인지 잘 모르겠습니다. PHP에서 세션을 사용하려면 session_start()명시 적으로 사용하여 페이지 상단에서 세션을 활성화해야합니다 . 이제 워드 프레스 session_start()의 핵심 은 어디에도 없습니다 . 내가 마지막으로 언급 한 내용이 어디에서 혼란스러워하는지보십시오.
평균 Joe

PHP 세션의 기본 원칙은 ... session_start ()는 서버 측 스토리지를 가능하게하는 반면 setcookie ()는 클라이언트 측 세션 데이터를 저장할 수 있다는 것입니다. 세션과 쿠키가 완전히 다르다는 아이디어를 제거하십시오. 유일한 차이점은 저장 위치입니다.
Martin Zeitler
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.