질문/조언질답게시판
Extra Form
PHP PHP 7.2
CMS Rhymix 2.x

애드온의 php에서

setCookie('CheckOnceRedirect', 'YES', $calc_time, '/');

 

$calc_time 은 계산된 초의 숫자가 담겨져 있습니다.

 

 

$called_position === 'before_module_init

 

위 시점에서는 쿠키나 세션 생성이 안되는건가요???

  • profile

    쿠키나 세션은 index.php 읽어들일때부터 이미 가지고 있습니다.

    세션은 서버쪽에 데이터가 있고, 쿠키는 브라우저쪽에 있습니다.

    그 값들을 서로 서버와 브라우저간의 통신하는 것인데 그 값들이 어느 콜포지션이냐에 따라 로딩이 안된다거나 틀리거나 그렇지 않아요.

     

    index.php 실행시점부터 이미 데이터는 다 들어가있지요.

     

    뭔가 셋이 안되고 잇다면 그건 어딘가 세팅이 잘못되어있다는 뜻인 것 같아요.

     

    세션이나 쿠키값은 언제든지 값이 변하거나 왼만하면 안변하니까요.(세션은 끊어지면 없어지긴하지만)

  • profile profile

    쿠키 생성이 안되는 것에 관한 질문이에요.

    라이믹스 코어의 쿠키는 잘 생성되고 있습니다.

    어딘가의 세팅은 무얼 말씀하시는지 알 수 있을까요?

  • profile profile
    네! 시점관련해서 해당 시점에서 안되냐고 물어보셔서 시점이 아무런 의미 없다 라는 뜻으로 서론이 길었습니다.

    setCookie('CheckOnceRedirect', 'YES', $calc_time, '/');

    에서 세팅값이 잘못된 것이 아닌것인지 말씀드렸던 것 입니다!

    아래 기진님의 답변으로 해결 잘되신 것 같네요.
  • profile
    https://github.com/rhymix/rhymix/blob/master/common/framework/session.php#L1163

    여기 관련 코드가 있는 것 같은데요. php 버전 분기가 있고 한데
    php 7.2 의 라이믹스에서 제가 사용한 setCookie('CheckOnceRedirect', 'YES', $calc_time, '/'); 잘못된 사용이 있는지 왜 안될까요.

    혹시 몰라서 레이아웃에 옮겨서
    {@
    }

    안에 넣어서 해 봐도 안되는 것 같더군요.
  • profile

    일단 가장 흔한 시나리오는 아래의 두 가지입니다.

     

    1. 쿠키를 굽기 전에 이미 내용이 출력되어서 더이상 쿠키를 구울 수 없는 상황인 경우

    2. $calc_time에 유닉스 타임스탬프가 아닌 상대값(15분, 24시간, 30일 등)을 넣으신 경우

  • profile profile

    if ($called_position === 'before_module_init' )
    {
    $end_time = strtotime(date("Y-m-d", strtotime("+1 day") ) ." 00:00:00 ");
    $now_time = time();
    $calc_time = $end_time - $now_time;
    setCookie('CheckOnceRedirect', 'YES', $calc_time, '/');
    }

    1번에 해당 되는 케이스 인가요?

     

    $calc_time 값은 유닉스타임으로 확인했습니다.

  • profile profile

    두 개의 유닉스 타임스탬프를 생성한 후, 둘의 차이를 계산하여 $calc_time에 담으셨으니
    $calc_time은 유닉스 타임스탬프가 아니라 그냥 몇만 초에 불과하겠지요.

    요즘 기준으로 정상적인 유닉스 타임스탬프라면 16억 초가 넘습니다.
    차이를 계산하지 말고 $end_time을 그대로 넣으셔야 합니다.

  • profile profile

    아... 방금 먼저 달아주신 댓글 보고 눈치를 챘습니다.

    저게 절대 시간을 넣어주어야 하는것이군요. 이제 해결할 수 있을 것 같습니다. 감사합니다!!!

    만료시간에 넣는 값이 현재시간에 얼마나 유지되는 시간이냐의 값인줄 착각했네요.