2010-04-22 78 views
6

Tôi đang cố gắng lưu trữ các mảng lồng nhau trong cookie. Tôi quyết định lưu trữ mảng dưới dạng chuỗi JSON. Tuy nhiên, tôi nhận được cảnh báo này:Lưu trữ các mảng lồng nhau trong cookie

PHP Cảnh báo: Giá trị cookie không được chứa bất kỳ nội dung nào sau đây '; \ t \ r \ n \ 013 \ 014 'trong foobar.php

Có cách nào được đề xuất để lưu trữ mảng lồng nhau trong cookie không?

+0

Ngoài sự tò mò, tại sao bạn cần lưu nhiều dữ liệu đó vào cookie? –

+0

Rất nhiều giả định xảy ra ở đây (đánh giá từ một số câu trả lời/phản hồi) ... Thực tế là nó là một mảng lồng nhau không nhất thiết hàm ý rất nhiều dữ liệu. Đầu tiên, chiều sâu lồng tối đa có thể là <= 3. Thứ hai, tôi chỉ lưu trữ id đối tượng (số nguyên). – morpheous

Trả lời

3

Bạn có thể sử dụng base64_encode()base64_decode()

Lưu ý rằng theo hướng dẫn:

dữ liệu Base64 mã hóa mất khoảng 33% nhiều không gian hơn so với dữ liệu gốc.

+0

Điều này dường như làm việc cho tôi. – morpheous

+0

Hãy nhớ rằng giải mã javascript base64 không hoàn toàn là trình duyệt chéo http://stackoverflow.com/questions/2820249/base64-encoding-and-decoding-in-client-side-javascript –

1

Tôi không nghĩ đó là cách làm sạch, nhưng bạn có thể urlencode chuỗi json_encode d để có thể lưu trữ trong cookie.

Chỉnh sửa: Tom Haigh cách chắc chắn là sạch hơn (sử dụng base64_encode).

+0

Đây là một cách tiếp cận phổ biến. 'rawurlencode' có thể là đặt cược tốt hơn nếu bạn muốn đọc cookie từ nơi khác, ví dụ: "DecodeURIComponent' của JavaScript. – bobince

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

Chỉ cần tuần tự hóa, hoạt động tốt.

Bạn nhận được rằng trong cookie của bạn:

'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

sự nguy hiểm của điều này là bạn sau đó là unserializing dữ liệu do người dùng gửi, đó là nguy hiểm tiềm tàng như bằng cách đi qua một chuỗi khác nhau người có thể nhanh chóng các đối tượng tùy ý, vv .. –

+0

Hoàn toàn đồng ý với điều đó. Không an toàn lắm, chỉ phụ thuộc vào loại dữ liệu bạn lưu trữ trong cookie đó. Nếu nó hợp lý, bạn có thể làm xáo trộn/mã hóa nó bằng khóa riêng. – Mikushi

+1

Ngoài ra dường như có vô số dấu chấm phẩy trong, điều này chắc chắn sẽ khiến 'Set-Cookie' thất bại? – bobince

2

Nếu bạn có một số hình thức khác của sự kiên trì có sẵn (db, phiên, memcache), tôi khuyên bạn nên lưu trữ các dữ liệu thực tế ở đó. Sau đó, đặt một số nhận dạng duy nhất trong cookie, có thể được sử dụng để tìm kiếm dữ liệu mong muốn. Nó chỉ sạch hơn và an toàn hơn nhiều.

2

Có cách nào được đề xuất để lưu trữ mảng lồng nhau trong cookie không?

Có - không. Lưu trữ nó serverside bằng cách sử dụng một phiên hoặc xử lý khác. Không chỉ có vấn đề định dạng và phạm vi với lưu trữ dữ liệu trong cookie, còn có kích thước tệp bị giới hạn.

C.

Các vấn đề liên quan