워드프레스에 로그인하면 일정 시간 동안 로그인이 유지됩니다. 하지만 로그인한 후에 금방 로그아웃되면서 로그인이 유지되지 않는 문제가 발생하기도 합니다.
이 글에서는 로그인 세션 만료 시간을 설정하는 방법과 로그인한 사용자들을 강제로 로그아웃시키는 방법에 대하여 살펴보겠습니다.
특히 사이트가 해킹 당한 것으로 의심이 되는 경우 모든 사용자들을 로그아웃시키고 관리자 비밀번호를 변경하는 등의 조치가 필요할 수 있습니다.
워드프레스 로그인이 유지되지 않는 경우
몇 달 전에 그누보드 게시판을 워드프레스 게시판으로 이전하는 작업에 관여한 적이 있습니다. 이상하게 로그인하면 금방 로그아웃되는 현상이 발생했습니다.
이 경우 wp-config.php 파일에 다음과 같은 코드를 추가하면 로그인 세션 만료 시간을 설정할 수 있습니다.
define('AUTH_COOKIE_EXPIRY', 86400); // 1 day
define('LOGGED_IN_COOKIE_EXPIRY', 86400); // 1 day
위의 코드를 추가하면 세션 만료 시간이 1일로 설정됩니다. 보안을 위해 1시간 내외로 설정하는 것을 고려할 수 있습니다.
다른 방법으로 auth_cookie_expiration 필터를 사용하여 보다 세밀하게 만료 시간을 설정할 수 있습니다.
add_filter('auth_cookie_expiration', function($expiration, $user_id, $remember) {
if ($remember) {
// "Remember me" 사용 시 1주일 동안 유지
return 7 * 24 * 60 * 60; // 1주일 (초 단위)
} else {
// "Remember me"를 사용하지 않을 때 1일 동안 유지
return 24 * 60 * 60; // 1일 (초 단위)
}
}, 10, 3);
위의 코드를 테마의 함수 파일에 추가하도록 합니다(차일드 테마를 만들어 작업).
위의 코드를 사용하면 사용자가 로그인할 때 "기억하기" 체크란을 체크하면 로그인 세션이 1주일 동안 유지됩니다.
AUTH_COOKIE_EXPIRY는 기본적인 전역 설정이고, auth_cookie_expiration은 보다 세밀하게 만료 시간을 제어하기 위해 사용할 수 있습니다.
강제로 모든 사용자 로그아웃시키기
사이트가 해킹당한 것으로 의심되거나 보안상의 이유로 사용자들이 다시 로그인하도록 해야 하는 경우 워드프레스에서 모든 사용자를 강제로 로그아웃시켜야 할 수 있습니다.
워드프레스에는 강제로 모든 사용자를 로그아웃시키는 기능은 없지만 몇 가지 방법으로 가능합니다.
워드프레스 솔트(Salt) 값을 변경하여 강제로 로그아웃시키는 방법
wp-config.php 파일에는 인증 키와 솔트(salt)가 입력되어 있습니다. 이 인증키와 솔트 값을 변경하면 로그인되어 있는 모든 사용자들이 강제로 로그아웃되고, 로그인하기 위해서는 사용자들이 다시 사용자 이름과 비밀번호를 입력해야 합니다.
특히 사이트가 해킹 당한 것으로 의심되면 솔트 값을 변경하고 관리자 비밀번호를 변경하는 조치를 취하는 것이 중요합니다.
시크릿 키를 재설정하려면 FTP에 접속해야 합니다. FTP에 접속하여 wp-config.php 파일을 열도록 합니다. 파일질라(FileZilla)를 사용하는 경우 아래 그림과 같이 wp-config.php 파일을 선택하고 오른쪽 마우스 버튼을 누른 다음, 보기/편집을 누릅니다.
인증키가 입력된 부분으로 이동합니다. 보통은 다음과 같이 비슷한 형식으로 인증키 값들이 입력되어 있을 것입니다.
define('AUTH_KEY', '3_Y2Zwb_wS,|+622m(lU8,RJ+O74% %&_`*$[fbV@Wn[;0J9:H*_tGh{7tD-@+Yb');
define('SECURE_AUTH_KEY', 'v|F(4Qd5-w-5b^qS}SCKnB)tt6;,j)g-ibxZHR|>fOf`8YWONK)yeEP&$li#y6BS');
define('LOGGED_IN_KEY', '[rrYU-5uHYMnKul<,l4_Xe9N+>4bTzVQx|3Xo=2Hl~z0T4|<8p1]b0}1iUQ`OqYU');
define('NONCE_KEY', 'c-|A7/~1@O)dye}NiymJ8jqHxjO]Ex-I8pn_0#@q!:_iqweX-7F,ZZi{#84vylSe');
define('AUTH_SALT', ']`(`$g@/ssK9`mZy;#uG=AK~1fS|M+Km2`Ou_VbhG&*/A|D9/D^tPPvD1{S]A#Un');
define('SECURE_AUTH_SALT', 'H`3ce7v94bpXhZ9=CWr_7O|G7>CSX/SK3nmto5)rf<6dF=S@hb:-}lgqNQCh(|D[');
define('LOGGED_IN_SALT', '=X.P/xr|G 8_K{Lze(D<ovcJm<e|0|r2PC@lv>%i-}EN}pK>|3()Wu5&-?;c=0|g');
define('NONCE_SALT', 'D[ni;joGG+USGKh8A .Jf5{bU1~-wy(IfzR[!iBMW$Jl]B&_r-6-zIh!fYf/vCI-');
하지만 간혹 아래 그림과 같이 인증키가 입력되지 않고 'put your unique phrase here'가 표시되는 경우를 목격합니다. 인증키와 솔트를 입력하지 않으면 보안에 문제가 되므로 반드시 시크릿 키를 생성하여 대체해야 합니다.
또한, 보안을 위해 주기적으로 인증키 값을 새로 생성하여 대체하는 것이 좋습니다. 위의 그림에서 솔트키 생성 링크를 클릭하면 인증키와 솔트가 자동으로 생성됩니다. 이 값들은 랜덤하며, 링크를 클릭할 때마다 또는 페이지를 새로 고침할 때마다 바뀝니다.
새로 생성된 인증키와 솔트 값을 복사하여 wp-config.php 파일 내에 추가되어 있는 기존의 키 값들을 대체하도록 합니다.
wp-config.php 파일에 인증키가 없는 경우
클라우드웨이즈(Cloudways)에서 워드프레스를 설치하면 wp-config.php 파일에 인증키들이 없어 당황할 수 있습니다.
클라우드웨이즈는 인증키와 솔트 입력 부분을 wp-salt.php 파일로 분리했습니다.
클라우드웨이즈를 이용하는 경우 wp-salt.php 파일에서 동일한 방법으로 인증키들을 교체하시기 바랍니다.
WPForce Logout 플러그인을 사용하여 모든 사용자 또는 특정 사용자를 로그아웃시키기
WPForce Logout은 관리자가 한 번의 클릭으로 모든 사용자 또는 특정 사용자를 로그아웃시키도록 하여 보안을 강화합니다. 이 플러그인을 사용하면 강제로 로그아웃시켜 무차별 대입 공격(brute force attack)으로부터 보호하고 문제가 되는 계정(예: 해킹 당한 계정)을 관리하는 데 도움이 됩니다.
기능
- 모든 사용자 강제 로그이아웃 조치
- 특정 사용자(들) 로그아웃
- 대량으로 사용자들을 로그아웃 시킴
- 온라인 사용자 보기
- 마지막 로그인 활동 추적
- 설명서가 잘 되어 있음
- 번역 가능
확장 기능
- 유휴 사용자 로그아웃 (활동이 없는 사용자 로그아웃)
- 브라우저를 닫으면 자동 로그아웃
- 세션 만료
- 로그아웃 리디렉션
아래는 플러그인 소개 사이트에 올라온 스크린샷입니다.
국내의 일부 사이트에 로그인하면, 특히 은행 사이트나 카드사 사이트인 경우, 보안을 위해 일정 시간 동안 활동이 없으면 강제로 로그아웃되기도 합니다. 이런 기능을 원하는 경우 Inactive Logout라는 플러그인을 사용하는 것도 가능합니다.
안녕하세요. 글 잘보고 있습니다. 혹시 로그인 관련해서 궁금한게 있는데요.
혹시 회원이 로그인하면 리다이렉트를 마이 페이지가 아니라 현재 접속한 창으로 하게 할 수 있나요?
보통 결제를 하려고 할 때 로그인 창이 뜰때 로그인을 하고 나면 마이 페이지로 오게 되니, 이 회원이 다시 결제창으로 오면 번거롭다는 생각이 들어서요. 로그인하고 난다음에 현재 접속한 페이지를 보이게 할 수 있는지 궁금합니다.
안녕하세요, 웹핏님
차일드 테마의 함수 파일에 다음 코드를 추가하여 작동하는지 테스트해보시겠어요?
add_action( 'woocommerce_login_form_end', 'bbloomer_actual_referrer' );
function bbloomer_actual_referrer() {
if ( ! wc_get_raw_referer() ) return;
if ( strpos( wc_get_raw_referer(), "lost-password" ) !== false ) return;
echo '<input type="hidden" name="redirect" value="' . wp_validate_redirect( wc_get_raw_referer(), wc_get_page_permalink( 'myaccount' ) ) . '" />';
}
잘 작동하는지 알려주시겠어요?