2010-04-22 3 views
6

중첩 된 배열을 쿠키에 저장하려고합니다. 배열을 JSON 문자열로 저장하기로 결정했습니다. 그러나, 나는이 경고를 받고있다 :중첩 된 배열을 쿠키에 저장

PHP 경고 : 쿠키 값은 다음을 포함 할 수 없다 ',; \ t \ r \ n \ 013 \ 014 'in foobar.php

중첩 된 배열을 쿠키에 저장하는 권장 방법이 있습니까? 당신은 base64_encode()을 사용할 수

+0

왜 많은 데이터를 쿠키에 저장해야합니까? –

+0

많은 가정들이 여기에 있습니다 (일부 답변/피드백으로 판단) ... 중첩 된 배열이라는 사실은 반드시 많은 양의 데이터를 의미하지는 않습니다. 우선, 최대 중첩 깊이는 <= 3 일 가능성이 큽니다. 둘째, 객체 ID (정수) 만 저장합니다. – morpheous

답변

3

및 설명서에 따라 base64_decode()

참고 :

Base64로 인코딩 된 데이터가 원본 데이터보다 약 33 % 더 많은 공간을합니다.

+0

이것은 나를 위해 작동하는 것 같습니다. – morpheous

+0

javascript base64 디코드가 완전히 교차 브라우저가 아닙니다. http://stackoverflow.com/questions/2820249/base64-encoding-and-decoding-in-client-side-javascript –

1

은 나는 그것을 할 수있는 깨끗한 방법 생각하지 않습니다,하지만 당신은 json_encode D 문자열이 쿠키에 저장 할 수 urlencode 수 있습니다.

편집 : Tom Haigh 방식이 확실하게 (base64_encode를 사용하여) 더 깨끗합니다.

+0

이것은 일반적인 접근 방법입니다. 'rawurlencode'는 다른 곳에서 쿠키를 읽으려면 더 나은 방법 일 수 있습니다. JavaScript의'decodeURIComponent'. – bobince

0
$array = array(); 
$array[] = array(1,2,3); 
$array[] = array('a','b','c'); 
setcookie("test",serialize($array)); 

그냥 직렬화하면 올바르게 작동합니다. 사용 가능한 지속성 (dB, 세션, memcache)에 다른 형태가있는 경우

'test' => string 'a:2:{i:0;a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}i:1;a:3:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";}}' (length=86) 
+3

이 위험은 사용자가 제출 한 데이터의 직렬화를 해제하는 것입니다. 다른 문자열을 전달하여 사람들이 임의의 객체를 인스턴스화 할 수 있으므로 위험 할 수 있습니다. –

+0

완전히 동의합니다. 그다지 안전하지는 않습니다. 쿠키에 저장하는 데이터의 종류에 따라 다릅니다. 합리적인 경우 개인 키로 난독 화/암호화 할 수 있습니다. – Mikushi

+1

또한'Set-Cookie'가 실패하게되는 세미콜론이 많은 것으로 보입니다. – bobince

2

, 나는 거기에 실제 데이터를 저장하는 것을 권 해드립니다 :

당신은 쿠키에 있음을 얻는다. 그런 다음 원하는 식별자를 찾는 데 사용할 수있는 고유 한 식별자를 쿠키에 넣습니다. 그것은 훨씬 깨끗하고 안전합니다.

2

중첩 된 배열을 쿠키에 저장하는 권장 방법이 있습니까?

예 -하지 마세요. 세션 또는 다른 핸들을 사용하여 서버 측에 저장하십시오. 쿠키에 데이터를 저장하는 데 서식 및 범위 문제가있을뿐만 아니라 파일 크기가 제한됩니다.

C.

관련 문제