2017-12-06 1 views
0

쿠키를 배열에 저장하려고합니다. 내 배열 제품 항목을 쿠키 배열에 저장하고 있지만 오류가 발생합니다.PHP : 쿠키에 배열 추가

$products = array(); 
    $item = array($id => $name); 
    print_r($item); 
    $products[] = $item; 
    setcookie('products',json_encode($products),strtotime('+1 day')); 
    var_dump($_COOKIE['products']); 

위의 코드를 인쇄

어레이 ( [4] => 러그 쥐)
공지 : 정의되지 않은 인덱스 : D의 제품 : \ XAMPP \ htdocs에 프로젝트 \ \ 포함 라인 \ 클래스 \ products.php 43
NULL

답변

3

쿠키는 클라이언트에 응답을 보낼 때 설정됩니다. 즉, 다음 요청이있을 때까지는 PHP 코드에서 액세스 할 수 없습니다. setcookie() 함수에 대한 설명서를 참조하십시오. 일반적인 함 수 :

다음에 쿠키를 볼 수있는 페이지를로드 할 때까지 쿠키가 표시되지 않습니다. 쿠키가 성공적으로 설정되었는지 테스트하려면 쿠키가 만료되기 전에 다음 로딩 페이지에서 쿠키를 확인하십시오. 만료 시간은 만료 매개 변수를 통해 설정됩니다. 쿠키의 존재를 디버그하는 좋은 방법은 단순히 print_r ($ _ COOKIE);를 호출하는 것입니다. 당신이 페이지를 새로 고침 후 그래서

http://php.net/manual/en/function.setcookie.php

, 당신이하지 않는 echo 무엇이든, 또는 응답 헤더가 전송됩니다 다른 작업을 수행, 당신은 var_dump 에드 쿠키의 내용을 볼 수 있습니다. 코드에서 setcookie()이 호출되기 전에 print_r($item);이 있으므로 headers already sent 경고가 표시되고 쿠키가 설정되지 않습니다.

방법 중 하나 또는 다른, 그것은 인덱스가 정말 설정되어있는 경우 등 $_GET, $_POST, $_COOKIE처럼 당신은 항상 isset() 또는 array_key_exists 확인해야합니다, 특히 자동 전역에서, 배열 인덱스가 설정되어 있다고 가정하는 거의 안전합니다.

+0

쿠키를 업데이트하기 위해 아약스를 사용하고 있습니다. 각 요청마다 동일한 오류가 발생합니다. 첫 번째 요청이 아닙니다. 첫 번째 요청 후 페이지를 다시로드하려고 시도했지만 Ajax 요청에 대해 동일한 오류가 발생합니다. –

+0

'setcookie()'전에'print_r'을 호출하고 있습니다. 'print_r()'를 제거하면 쿠키가 작동합니다. –