DB는 UTC, PHP는 KST — 9시간 어긋나서 로그인 잠금이 즉시 풀렸습니다
비밀번호를 5번 틀리면 15분 잠기게 만들었는데, 잠긴 계정이 바로 다시 로그인됐습니다. 오류는 하나도 안 났습니다.
원인은 시간대였습니다. DB의 NOW()는 UTC로 돌고 PHP는 KST로 돌고 있었습니다. "지금부터 15분 뒤"를 PHP가 계산해서 넣으면, DB가 볼 때는 이미 9시간 전 시각이라 잠금이 걸리자마자 만료 상태가 됩니다.
해결은 한 줄이었습니다. DB에 붙을 때마다 시간대를 PHP와 맞춰 고정하는 것.
무서운 건 오류가 안 난다는 점입니다. 화면도 정상이고 로그도 깨끗한데 보안 장치만 조용히 무력화됩니다. 같은 함정이 입금 기한, 광고 게재 기간, 예약 공개처럼 "언제까지"가 붙는 모든 곳에 그대로 있습니다.
시간 관련 기능을 만들면 반드시 직접 잠가 보고 기다렸다가 풀리는지 확인하세요.
원인은 시간대였습니다. DB의 NOW()는 UTC로 돌고 PHP는 KST로 돌고 있었습니다. "지금부터 15분 뒤"를 PHP가 계산해서 넣으면, DB가 볼 때는 이미 9시간 전 시각이라 잠금이 걸리자마자 만료 상태가 됩니다.
해결은 한 줄이었습니다. DB에 붙을 때마다 시간대를 PHP와 맞춰 고정하는 것.
무서운 건 오류가 안 난다는 점입니다. 화면도 정상이고 로그도 깨끗한데 보안 장치만 조용히 무력화됩니다. 같은 함정이 입금 기한, 광고 게재 기간, 예약 공개처럼 "언제까지"가 붙는 모든 곳에 그대로 있습니다.
시간 관련 기능을 만들면 반드시 직접 잠가 보고 기다렸다가 풀리는지 확인하세요.