[XE] 자동 로그인 풀림현상

돌아다니면서 구한 자료로 공부하는 공간입니다..

틀린부분이 있다면 말씀해주시면 수정하도록 하겠습니다.

※ 남을 비방하거나 욕 / 정치적인 글은 삭제 대상이 됩니다. ※

[XE] 자동 로그인 풀림현상

만키로군 0 2837 0
What steps will reproduce the problem?
1. PC와 모바일에서 각각 자동 로그인 후
2. 일정 시간이 흐른면
3. 둘다 로그아웃 상태로 풀려버립니다.
What is the expected output? What do you see instead?
PC 모바일에서 각각 자동 로그인을 하면 풀리지 말아야 합니다.
What version of the product are you using? On what operating system?
1.7.3.0
Please provide any additional information below.
찾아보니깐 1.5.4.X 버전부터 1.7.3.0 까지
계속해서 이슈가 발생한것 같은데
버전을 몇번 거쳤는데도
해당 오류가 전혀 고쳐지지 않았습니다.
공홈도 동일 현상이 나타나는데 이번에는 꼭좀 신경써서 수정 부탁드립니다.

   
#5 intelmac...@gmail.com
이 문제를 저도 겪어서 코드를 살펴보니 modules/member/queries/deleteAutologin.xml 에 문제가 있습니다.
삭제 컨디션이 
        <condition operation="equal" column="autologin_key" var="autologin_key" pipe="or" default='' />
        <condition operation="equal" column="member_srl" var="member_srl" pipe="or" />
이렇게 돼 있어서 autologin_key 또는 member_srl 하나만 일치해도 삭제하는데요.  이 autologin_key가 생성되는 건
member.controller.php의 doLogin() 을 보면 
		$key = md5($user_id . $password . $_SERVER['HTTP_USER_AGENT']);
이렇게 돼 있습니다.  
로그인 구조가 이 key와 member_srl을 xe_member_autologin에서 한번 delete 하고 insert 하는데 (xe core 1.7.3.1 기준으로 member.controller.php 의 1697줄) 문제는 로그인 유지 하는 브라우져가 바뀌면 (즉 HTTP_USER_AGENT가 바뀌면) 그 전 autologin_key값이 날라가죠.  위의 delete 문구가 or 로 돼 있어서 member_srl만 맞아도 삭제하게 돼 있으니.  이러면 자동로그인이 안됩니다.  member.controller.php의 doLogin() 보면 그 키 값을 테이블에서 불러와 현재 브라우져에서 새로 생성한 키와 비교하는데 (member.controller.php 의 1489줄) 이게 안 맞으니 자동 로그인이 안되죠.
그러니 아래 시나리오를 생각한다면
1. PC에서 로그인 유지를 이용해 로그인 한다.  HTTP_USER_AGENT키 포함한 키가 생성돼 xe_member_autologin 테이블에 insert한다.  브라우저를 닫는다 (session 날리기 위해)
2. 스마트폰에서 로그인 유지를 이용해 로그인 한다. 저 위 delete 문구에 의해 방금 insert한 키 값이 날라가고 새 key가 생성
3. 위의 1번 스텝의 PC로 돌아가 다시 사이트에 접속하면 xe_member_autologin테이블에서 그 키 값이 없어서 자동 로그인이 안된다 
이걸 고치는 건 modules/member/queries/deleteAutologin.xml 의 or 를 and 로 바꿔서 키 삭제시 member_srl만 체크하는 걸 바꿔주는 겁니다.
즉 이걸
        <condition operation="equal" column="member_srl" var="member_srl" pipe="or" />
이렇게
        <condition operation="equal" column="member_srl" var="member_srl" pipe="and" />
고치면 해결됩니다.
Apr 27 (42 hours ago)
#6 intelmac...@gmail.com
아.. 또 다른 방법은 deleteAutologin.xml를 고치지 말고 대신 member.controller.php에서 autologin_key 생성 방법에서 HTTP_USER_AGENT를 빼면 되겠죠.  사실 그게 왜 키 생성에 들어가 있는지 모르겠으니까요.  따라서 
따라서 xe core 1.7.3.1기준으로 줄번호를 적자면 
1512줄의 $key = md5($user_id . $password . $_SERVER['HTTP_USER_AGENT']);
를
$key = md5($user_id . $password ); 로 수정하고
1698줄의 
$autologin_args->autologin_key = md5(strtolower($user_id).$this->memberInfo->password.$_SERVER['HTTP_USER_AGENT']);
를
$autologin_args->autologin_key = md5(strtolower($user_id).$this->memberInfo->password);
로 수정해도 되겠네요.

0 Comments
제목