2012-09-16 5 views
7

쿠키를 이름으로 설정하도록했습니다. csrf_cookie_name이 값의 값을 사용합니다. $ this-> security-> get_csrf_hash();하지만 작동하지 않습니다.CodeIgniter에서 쿠키가 작동하지 않음

$csrf_cookie_value = $this->security->get_csrf_hash(); 
    $this->input->set_cookie('csrf_cookie_name', $csrf_cookie_value); 
    echo $this->input->cookie('csrf_cookie_name'); 
    die(); 

을하지만 그것은 작동하지 않습니다 아무것도 밖으로 반향되지 않습니다 :

내 컨트롤러이 있습니다.

$csrf_cookie_value = $this->security->get_csrf_hash(); 
echo $csrf_cookie_value; 

나는 일을하고 생성 된 문자열은 밖으로 반향된다

내가에만이 시도하십시오.

그래서, 나는이 다음 2 개 라인 내에서 뭔가 잘못이라고 가정 : 당신의 조언을

$this->input->set_cookie('csrf_cookie_name', $csrf_cookie_value); 
echo $this->input->cookie('csrf_cookie_name'); 

감사합니다. $this->input->cookie() 기능은 글로벌 $_COOKIE 배열에서 직접 읽고 $this->input->set_cookie() 서버에 즉시 $_COOKIE 배열을 채울 수 없기 때문에

+2

PHP에서 작동하는 방식이 너무 명확하지 않지만 내 생각에 요청 헤더에서 읽는 쿠키를 읽고 읽을 때 쿠키가 설정되지 않았기 때문에 요청 헤더가 읽히지 않을 것입니다. 브라우저에서 쿠키가 설정되었는지 여부를 묻는 메시지가 나타나면 확인하십시오. 추가 요청은 쿠키 값을 올바르게 읽어야합니다. 참고 내가 틀릴 수도 있습니다 .. – Baz1nga

+0

$ this-> input-> set_cookie ('csrf_cookie_name', $ csrf_cookie_value);로 설정했습니다. 나는 그것을 반향하려고하기 전에. – Derfder

+0

나는 쿠키 요청 및 응답 및 쿠키 작동 방식에 대해 읽는 것을 고려해보십시오. – Baz1nga

답변

7

이유는 쿠키 에코을 받고되지 않습니다이다. 대신 $this->input->set_cookie()은 브라우저에 보내지고 저장 될 쿠키를 대기열에 넣습니다. 사용자의 다음 HTTP 요청에서만이 쿠키를 다시 관찰 할 수 있습니다.

둘째, 아마도 더 중요한 것은 csrf 쿠키를 부적절하게 사용하고있는 것입니다. 교차 사이트 요청 위조로부터 보호하려면 해당 사이트를 사용하도록 설정하고 속성을 config/config.php으로 설정해야합니다. 그게 다야. 컨트롤러에서 읽고 쓸 필요가 전혀 없습니다.

+0

양식에없는 링크에서 사용하고 있으므로 직접 액세스해야합니다. – Derfder

19

쿠키의 수명을 지정해야합니다. 0은 세션 쿠키가되고 다른 것은 time()에 추가됩니다.

수명을 지정하지 않으면 CI가 쿠키를 삭제하겠다고 해석합니다. 그리고는 않습니다 정확히 무엇 :

$this->input->set_cookie('name', 'value', 0); //expires when the browser window closes 
$this->input->set_cookie('name', 'value', 3600); //expires in one hour 
$this->input->set_cookie('name', 'value');  //will delete the cookie (if the cookie does not exist, you will not notice anything happening) 
+1

이것이 맞습니다. 만료일이 필요합니다. 입력 라이브러리를 설정하지 않으면 (또는 숫자가 아닌 값으로 전송 된 경우) 입력 라이브러리는 과거의 만료 날짜를 설정합니다 (이 설정은 설정하지 않은 경우와 동일합니다) –

3

쿠키가 이미 존재한다. Javascript를 통해 다음을 통해 문의 할 수 있습니다.

$.cookie("<?php echo $this->config->item("csrf_cookie_name"); ?>"); 

유용한 정보가 필요합니다.