제작자분께서는 그럴리가 없다고 하셨지만 저희 사이트 환경에서는 오류가 발생합니다.
1시간 단위로 갱신하게 해 놓았을때 로그인한 회원이 활동중에 해당 애드온에 의해 갱신이 될 때
프로필이미지와 서명을 가져오지 못하는 상황이 됩니다.
이때 로그아웃 후 다시 로그인을 하면 다시 제대로된 정보를 가져올 수 있게 됩니다.
각종 스킨등에서 프로필이미지와 서명을 가져오는 것은 모두 비슷한 방식을 사용할 것 입니다.
로그인이 아니면 리턴시키는 코드 로그인변수 담기 갱신시간이 안되었으면 리턴시키는 코드 $args = new stdClass; $args->member_srl = $logged_info->member_srl; executeQuery('member.updateLastLogin', $args); $oMemberController = getController('member'); $oMemberController->_clearMemberCache($logged_info->member_srl);
현재 저희는 이 문제 때문에 애드온 사용을 하지 못하고 있는데요. 이문제가 해결이 된다면 자동로그인 사용자가 많아 다시 사이트에서 사용하고 싶습니다.
11,12 라인의
$oMemberController = getController('member');
$oMemberController->_clearMemberCache($logged_info->member_srl);
부분을 제거해도 로그인시간 갱신에 문제가 없을지도 궁금합니다.
*라이센스와 별개로 포인트가 무료가 아닌 자료라 코드의 일부만 게시하고 일부는 설명으로 대체했습니다.
딱 저렇게 캐시를 비우는 코드뿐인데도 프로필이미지, 서명 등 일부 회원정보가 증발한다면 코어의 버그인 것 같습니다. 서드파티 자료에서 회원정보를 변경한 후에는 저렇게 캐시를 비워주는 것이 정상이거든요. 캐시를 비워주지 않으면 변경한 것이 효과가 없어요.
예전 글에 제작자분이 캐시 관련하여 의견을 달아주신 것을 보았습니다만, 회원 모듈의 캐시 로직이 워낙 복잡하기 때문에 예상치 못한 버그가 숨어 있을 수도 있습니다. XE의 회원정보는 최소 3단계로 캐시됩니다. 오브젝트 캐시와 전역변수 캐시가 따로 있고, 프로필이미지와 서명 등은 별도의 전역변수를 사용하여 또 캐시됩니다;; 따라서 어느 한쪽의 캐시를 비우자마자 다른 부분의 캐시를 참조하려고 하면 불완전한 데이터가 돌아올 가능성이 충분히 있습니다. (현재 로그인되어 있는 회원 본인의 프로필이미지와 서명이 안 나오는 거죠? 다른 회원의 프로필이미지와 서명은 괜찮고요?)
modules/member/member.controller.php 맨 아랫부분에 _clearMemberCache 함수가 있는데요... 이 함수 맨 아래에 아래와 같이 한 줄을 추가해 보시기 바랍니다. (중괄호가 여러 겹으로 되어 있으니 어디가 함수 맨 아래인지 정확하게 확인해 주세요 ㅎㅎ)
unset($GLOBALS['__member_info__'][$member_srl]);
만약 이것으로 증상이 해결되거나 뭔가 차이가 발생한다면 코어 버그가 맞으니 깃허브에 PR을 하나 넣어야겠습니다.