ProgramingTip

쿠키 PHP의 배열

bestdevel 2020. 12. 31. 23:33
반응형

쿠키 PHP의 배열


쿠키에 배열을 저장하는 적절한 방법은 무엇입니까? PHP 코드 예제 :

$number_ticket=2;
$info[7][5]=1;
$info[8][5]=1;

데이터화 :

setcookie('cookie', serialize($info), time()+3600);

그런 다음 데이터를 생성 화 해제합니다.

$data = unserialize($_COOKIE['cookie'], ["allowed_classes" => false]);

데이터 이후 $ info와 $ data는 동일한 내용을 갖습니다.


쿠키에 배열 값을 저장하기 위해 필요한 옵션이 있습니다.

쿠키를 JSON으로 저장

코드 저장

setcookie('your_cookie_name', json_encode($info), time()+3600);

코드 읽기

$data = json_decode($_COOKIE['your_cookie_name'], true);

JSON은 JavaScript로 엔드에서 쿠키를 읽어야하는 경우에도 좋은 선택이 될 수 있습니다.

실제로 배열을 문자열로하고 CHAPTER 2 문자열을 동일한 배열로 다시 CHAPTER 2 하는 모든 encrypt_array_to_string/ decrypt_array_from_string메소드 그룹을 사용할 수 있습니다 . 를 들어 예 정수 배열에 / 사용할 수도 있습니다 .explodeimplode

경고 : 일련 화 / 해제를 사용하지 않습니다.

PHP.net에서

여기에 이미지 설명 입력

Do not pass untrusted user input to unserialize(). -쿠키를 포함하여 HTTP에서 온 모든 것은 수 없습니다!

보안 관련 참고 자료

대체 솔루션으로 배열을 단순화하여 변환하지 수행 할 수 있습니다.

setcookie('my_array[0]', 'value1' , time()+3600);
setcookie('my_array[1]', 'value2' , time()+3600);
setcookie('my_array[2]', 'value3' , time()+3600);

그리고 $_COOKIE변수 를 인쇄 하면 다음과 같이 표시됩니다.

echo '<pre>';
print_r( $_COOKIE );
die();
정렬
(   
    [my_array] => 배열
        (
            [0] => 값 1
            [1] => 값 2
            [2] => 값 3
        )

)

이 문서화 된 PHP 기능입니다.

PHP.net에서

Cookies names can be set as array names and will be available to your PHP scripts as arrays but separate cookies are stored on the user's system.


쿠키에서 일련 화 및 생성 화 해제를 사용하면 보안 위험이 있습니다. 사용자 (또는 공격자)는 쿠키 데이터를 사용하여 서버이를 사용하여 설정화 해제하면 PHP 코드를 사용할 수 있습니다. 쿠키 데이터는 수 없습니다. 대신 JSON을 사용하십시오!

에서 PHP 사이트 :

allowed_classesunserialize()options값에 관계없이 있는 수없는 사용자 입력을 전달하지 않습니다 . 내장 화 해제는 개체 인스턴스화 및 자동로드로 인해 코드가로드되고 실행될 수 있고 악의적 인 사용자가이를 악용 할 수 있습니다. 내장 화 된 데이터를 사용자에게 전달해야하는 경우 JSON ( 및을 통해) 같은 안전한 표준 데이터 교환 형식 을 사용합니다.json_decode()json_encode()


쿠키는 기본적으로 텍스트로 JSON 인코딩하여 배열을 사용합니다 (참조 json_encode). 하지만 여기서는 허용되는 길이에는 제한이 있습니다.


시도해 시도 . 배열을 공유 형식으로 변환 한 다음이를 사용 하여 다시 배열로 변환 할 수 있습니다 . WordPress와 같은 펼쳐는이를 사용하여 단일 데이터베이스 필드에 여러 값을 저장합니다.serialize()unserialize()

json_encode()Rob이 말한대로 사용할 수도 있고, 자바 자바로 쿠키를 읽고 자 할 때 유용 할 것입니다.


다른 쿠키에 다른 요소를 작성하려고 할 수도 있습니다. 쿠키 이름은 배열 이름으로 설정할 수 있으며 PHP 스크립트에서 배열로 사용할 수 있지만 별도의 쿠키는 사용자 시스템에 저장됩니다. 여러 이름과 값으로 하나의 쿠키를 설정하려면 explode ()를 고려하십시오. 이 목적으로 serialize ()를 사용하지 않는 것이 좋습니다. 보안 허점을 초래할 수 있기 때문입니다. 자세한 내용 setcookie PHP 기능을 참조하십시오.


최근에 클라이언트를 위해이 코드를 만들었습니다.이 코드에서 쿠키에 배열을 사용하고 있습니다. 실제로이 코드는 쿠키를 사용하여 사용자가 최근에 본 페이지를 가져옵니다. 도움이되기를 바랍니다.

function curPageURL() { // get url
return 'http' . ((
!empty($_SERVER['HTTPS']) &&
$_SERVER['HTTPS'] !== 'off' ||
$_SERVER['SERVER_PORT'] == 443
) ? 's' : '') . '://' . $_SERVER['SERVER_NAME'] . (
$_SERVER['SERVER_PORT'] == 80 ? '' :  $_SERVER['SERVER_PORT']
) . $_SERVER['REQUEST_URI'];
}

$currentPage = curPageURL(); // call function
$counter = $_COOKIE['_counter']; // set counter variable

if(!$_COOKIE['_PAGES']){ // if _Pages cookie
$default = 1; // set default value to 1
setcookie("_counter",$default,time()+7200); // set counter cookie
setcookie("_PAGES[$default]",$currentPage, time()+3600); // set cookie  
}
else{ // if ! _Pages cookie 
$default = $counter+1; // set default value to +1
setcookie("_counter",$default,time()+7200); // set counter cookie
}


if(@in_array($currentPage, @$_COOKIE['_PAGES'])){ // if same url found
}
else{ // if new url found
setcookie("_PAGES[$default]",$currentPage, time()+3600); // set cookie  
}


if($_COOKIE['_PAGES']){
foreach ($_COOKIE['_PAGES'] as $value){
    echo "<a href='{$value}'>{$value}</a>";
} 
}

필요한 것을 찾았습니다. 이제 방문한 제품을 쿠키에 저장하고 나중에 사이트로 돌아올 때 보여줄 수 있습니다.

// set the cookies
setcookie("product[cookiethree]", "cookiethree");
setcookie("product[cookietwo]", "cookietwo");
setcookie("product[cookieone]", "cookieone");

// after the page reloads, print them out
if (isset($_COOKIE['product'])) {
    foreach ($_COOKIE['product'] as $name => $value) {
        $name = htmlspecialchars($name);
        $value = htmlspecialchars($value);
        echo "$name : $value <br />\n";
    }
}

참조 URL : https://stackoverflow.com/questions/9032007/arrays-in-cookies-php

반응형