source

쿠키에 PHP 배열 저장

factcode 2022. 9. 21. 23:23
반응형

쿠키에 PHP 배열 저장

쿠키에 어레이를 저장하는 적절한 방법은 무엇입니까?PHP 코드의 예:

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

배열 값을 쿠키에 저장하려면 먼저 값을 문자열로 변환해야 합니다. 따라서 다음과 같은 옵션이 있습니다.

쿠키를 JSON으로 저장

코드 저장

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

판독 코드

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

JSON은 JavaScript를 사용하여 프런트 엔드에 cookie를 읽어야 할 경우에도 좋은 선택이 될 수 있습니다.

쓸 수 있어요.encrypt_array_to_string/decrypt_array_from_string배열을 문자열로 변환하고 문자열을 동일한 배열로 다시 변환하는 메서드 그룹입니다.예를 들어,explode/implode정수 배열의 경우.

경고: 직렬화/직렬화 해제를 사용하지 마십시오.

PHP.net 에서

여기에 이미지 설명 입력

Do not pass untrusted user input to unserialize().하여 HTTP에 할 수 없습니다 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.

데이터 직렬화:

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

그런 다음 데이터 직렬화를 취소합니다.

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

데이터 뒤에 $info와 $data의 내용이 동일합니다.

쿠키에서 직렬화 및 직렬화 해제를 사용하면 보안 위험이 있습니다.사용자(또는 공격자)는 쿠키 데이터를 변경할 수 있으며, 이를 직렬화 해제하면 서버에서 PHP 코드가 실행될 수 있습니다.쿠키 데이터를 신뢰할 수 없습니다.대신 JSON을 사용하세요!

PHP 사이트:

할 수 없는 사용자 을 " " " 에 전달하지 .unserialize()에에를 optionsallowed_module 값입니다.시리얼화를 해제하면 오브젝트 인스턴스화 및 자동 로딩으로 인해 코드가 로드되고 실행될 수 있으며 악의적인 사용자가 이를 악용할 수 있습니다.JSON과 같은 안전한 표준 데이터 교환 형식을 사용합니다.json_decode()그리고.json_encode()시리얼화된 데이터를 사용자에게 전달할 필요가 있는 경우).

시도해 보십시오. 어레이를 문자열 형식으로 변환한 다음 를 사용하여 어레이로 다시 변환할 수 있습니다.WordPress와 같은 스크립트는 이를 사용하여 단일 데이터베이스 필드에 여러 값을 저장합니다.

를 사용할 수도 있습니다.json_encode()Javascript의 쿠키를 읽고 싶다면 도움이 될 수 있습니다.

cookie는 기본적으로 텍스트이므로 배열을 JSON 문자열로 인코딩하여 저장할 수 있습니다( 참조).json_encode저장 가능한 문자열 길이에는 제한이 있습니다.

또한 다른 쿠키에 다른 요소를 쓸 수도 있습니다.쿠키 이름은 배열 이름으로 설정할 수 있으며 PHP 스크립트에서 배열로 사용할 수 있지만 개별 쿠키는 사용자의 시스템에 저장됩니다.여러 개의 이름과 값을 가진 하나의 쿠키를 설정하려면 expect()를 고려하십시오.이 목적으로 serialize()를 사용하는 것은 권장되지 않습니다.이는 보안에 구멍이 뚫릴 수 있기 때문입니다.자세한 내용은 setcookie PHP 함수를 참조하십시오.

필요한 걸 찾은 것뿐이야이제 방문 상품을 쿠키에 저장하고 나중에 사이트에 돌아오면 보여줄 수 있게 되었습니다.

// 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";
    }
}

결정만으로 쿠키에 대량의 데이터 타입 어레이를 저장할 수 있었습니다.마법처럼 작동한다.고마워 에릭 내 날을 구했다.

define( 'COOKIE_PORTIONS' , '_piece_' );

function clearpieces( $inKey , $inFirst ) {
    $expire = time()-3600;
   
    for ( $index = $inFirst ; array_key_exists( $inKey.COOKIE_PORTIONS.$index , $_COOKIE ) ; $index += 1 ) {
        setcookie( $inKey.COOKIE_PORTIONS.$index , '' , $expire , '/' , '' , 0 );
        unset( $_COOKIE[$inKey.COOKIE_PORTIONS.$index] );
    }
}

function clearcookie( $inKey ) {
    clearpieces( $inKey , 1 );
    setcookie( $inKey , '' , time()-3600 , '/' , '' , 0 );
    unset( $_COOKIE[$inKey] );
}

function storecookie( $inKey , $inValue , $inExpire ) {
    $decode = serialize( $inValue );
    $decode = gzcompress( $decode );
    $decode = base64_encode( $decode );
   
    $split = str_split( $decode , 4000 );//4k pieces
    $count = count( $split );
   
    for ( $index = 0 ; $index < $count ; $index += 1 ) {
        $result = setcookie( ( $index > 0 ) ? $inKey.COOKIE_PORTIONS.$index : $inKey , $split[$index] , $inExpire , '/' , '' , 0 );
    }
   
    clearpieces( $inKey , $count );
}

function fetchcookie( $inKey ) {
    $decode = $_COOKIE[$inKey];
   
    for ( $index = 1 ; array_key_exists( $inKey.COOKIE_PORTIONS.$index , $_COOKIE ) ; $index += 1 ) {
        $decode .= $_COOKIE[$inKey.COOKIE_PORTIONS.$index];
    }
   
    $decode = base64_decode( $decode );
    $decode = gzuncompress( $decode );
   
    return unserialize( $decode );
}

최근 나는 내 의뢰인에 대한 이 코드를 만들어 낸 거, 나는 쿠키의 그 코드에서 실제로 이 코드 최근 사용자 쿠키를 사용하여 페이지 보면 이것은 너에게 도움이 되길 바래...배열을 사용하고 있습니다!

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>";
} 
}

언급URL:https://stackoverflow.com/questions/9032007/storing-php-arrays-in-cookies

반응형