Extra Form
PHP PHP 7.1
CMS XpressEngine

아래 로그인 회원 체크하는 관련 답변을 달다가 제가 가진 애드온 코드에 궁금한 것이 있어 질문 드립니다.

 

if(콜포지션 && !$GLOBALS['__login_check_addon_called__']) {      

 

 실행코드                      

 

$GLOBALS['__login_check_addon_called__'] = true;    

}

 

제가 추측하기에는 위와 같이 처리해서 실행코드가 동작하는 마지막에 이후에 다시 실행하지 않을 수 있는 확인사항을 추가해 준 것으로 보이는데요.

 

 

위 코드를 10분에 한번씩 동작이 다시 되도록 고쳐보려고 하는데요.

값을 true 로 주지 않고 현재 시간을 주면 어떨까 하는 생각을 해보았습니다.

 

date()

600초 가 지나면 다시 실행하게 하려 합입니다.

 

 

 

if(콜포지션 && date() >= $GLOBALS['__login_check_addon_called__'] +600) {      

 

 실행코드                      

 

$GLOBALS['__login_check_addon_called__'] = date();    

}

 

위와 같이 코드르 바꾸는게 맞는건지 궁금해서 질문으로 작성해 봅니다.

 

전역변수? 라고 부르는게 맞는지 잘은 모르겠지만 이 전역변수에 값을 담을때 저런식으로 함수의 결과값이 담기도록 하고 또 이 값을 사용할때 위와 같이 사용하면 담긴 값 이 그대로 사용되는지 해서요.

 

 

 

 

 

  • profile
    $GLOBALS 는 전역변수일뿐이지 데이터가 요청 단위를 넘어서 저장되지 않습니다.
    (요청이 종료되면, 데이터도 소멸됨)
    저런 형태로 구현하시려면 object 캐시나 DB 상에 호출된 시간을 저장해두고 체크해두셔야 합니다.
  • profile profile

    브라우저를 닫기 전까지 유효한거 아니에요? 그것때문에 저렇게 시도해 보려는 건데요...

     

    db에 저장된 시간을 불러와서 비교하는 것을 하지 않으려는 목적이거든요...

  • profile profile
    브라우저를 닫기전까지 유효한걸 쓰시려면 전역 변수가 아니라 세션을 사용하셔야합니다.
    세션에 내용을 기록해두고, 체크하시면 될꺼 같습니다.
  • profile profile
    아.. 세션을 써야 하는 군요. 그럼 애드온 원작자도 1번 실행 이후 다시 실행 안되게 하려고 구현한게 작동하지 않았겠네요...
  • profile profile
    원작자가 어떤 의도로 넣었는지는 코드를 보지 않아서 뭐라고 말씀드릴순 없습니다만,
    말씀하신대로 잘못 넣어서 의도한대로 작동 안한걸수도 있고,
    애드온의 작동 포인트가 여러군데라서 한번만 체크하면 충분하다라는 생각으로 넣은걸수도 있습니다.
    한번의 요청에서 애드온이 여러번 호출된다면 전역변수로 이미 불러왔는지 확인할수 있어도 충분하니깐요.
  • profile profile

    if($called_position == 'before_module_init'  && !$GLOBALS['__login_check_addon_called__']) {

    실행코드

    $GLOBALS['__login_check_addon_called__'] = true;
    }

    이게 원래 코드 입니다. 조건에 보시면 전역변수가 없다면 실행한다는 조건을 걸어 놨거든요.

    원작자 의도는 애드온 실행이 2 차례까지 될 수 있으니 그것의 효율을 조금 높이려고 저렇게 한것이라는 말씀으로 이해가 되는 듯 합니다.

  • profile profile

    말씀 하신대로 세션으로 고쳐 보았습니다.

    if(콜포지션 && date() >= $_SESSION['__login_check_addon_called__'] +600) {

    실행코드

    unset($_SESSION['__login_check_addon_called__'] );
    $_SESSION['__login_check_addon_called__'] = date();
    }


    10분 후에 다시 실행될때 세션을 다시 설정하기 위해
    unset($_SESSION['__login_check_addon_called__'] );

    이렇게 초기화를 해주는게 맞을까요??

  • profile profile
    초 단위로 계산하려면 date()가 아니라 time()을 사용하셔야 합니다.
    곧바로 새 값을 넣어줄 거라면 unset은 필요하지 않습니다.
  • profile profile
    아.. 초단위가 time 이군요......