source

$_COOK 접근setcookie() 직후 IE

manycodes 2022. 11. 5. 09:00
반응형

$_COOK 접근setcookie() 직후 IE

값을 사용).$_COOKIE)를 setcookie()기능을 합니다. 하면 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」$_COOKIE['uname']정해지지 않았어요. 왜요? 왜요?

주의해 주세요.$_COOKIE['uname']는 페이지 리프레시 후, 페이지 리프레시 페이지 리프레시, 리프레시, 페이지 리프레시 등 시 대로 설정됩니다.

setcookie('uname', $uname, time() + 60 * 30);
echo "Cookie value: " . $_COOKIE['uname'];

cookie는 응답이 클라이언트에 반환될 때까지 설정되지 않으며, 그 후 클라이언트의 다음 요청이 있을 때까지 PHP에서 사용할 수 없습니다.

단, cookie를 스크립트로 설정하면 다음 작업을 수행할 수 있습니다.

setcookie('uname', $uname, time()+60*30);
$_COOKIE['uname'] = $uname;

$_COOKIE는 웹의 스테이트리스 특성으로 인해 페이지가 로드될 때 설정됩니다. 액세스 수 있는 는, 「즉시 액세스 할 수 .」를 설정합니다.$_COOKIE['uname']이치

예를 들어 다음과 같습니다.

if (isset($_COOKIE['uname'])) {
    // get data from cookie for local use
    $uname = $_COOKIE['uname'];
}
else {
    // set cookie, local $uname already set
    setcookie('uname', $uname, time() + 1800);  
}

를 호출한 직후에 cookie 값에 액세스 하는 경우는, 를 사용할 수 없습니다.그 이유는 프로토콜의 특성 때문입니다(https://www.rfc-editor.org/rfc/rfc6265) 참조).사용할 때setcookie()클라이언트에 대한 나머지 HTTP 헤더와 함께 전송되는 Cookie를 정의합니다(http://php.net/manual/en/function.setcookie.php) 참조).그렇지만$_COOKIE한편 에는 클라이언트(http://php.net/manual/en/reserved.variables.cookies.php)에서HTTP Cookie를 통해 현재 스크립트로 전달된 변수가 포함되어 있습니다.

★★★★★★★★★★를 변경할 때$_COOKIEsetcookie()권장하는 처럼 - 되어 있지 않습니다 - 클라이언트로부터의 쿠키만 있지 않습니다.이로 인해 어플리케이션에서 사용되는 서드파티 코드로 이루어진 가정이 방해되어 원치 않는 사이트 효과가 발생할 수 있습니다.따라서 일반적으로 이것은 좋은 방법이 아닙니다.또한 이 방법은 콜이 다음 콜이 있을 때에만 선택할 수 있습니다.setcookie()자기 코드의 일부입니다.

같은 요구 내에서 세트를 취득하는 깨끗하고 투과적인 방법은 를 사용하는 입니다(http://php.net/manual/en/function.headers-list.php) 참조).

function getcookie($name) {
    $cookies = [];
    $headers = headers_list();
    // see http://tools.ietf.org/html/rfc6265#section-4.1.1
    foreach($headers as $header) {
        if (strpos($header, 'Set-Cookie: ') === 0) {
            $value = str_replace('&', urlencode('&'), substr($header, 12));
            parse_str(current(explode(';', $value, 1)), $pair);
            $cookies = array_merge_recursive($cookies, $pair);
        }
    }
    return $cookies[$name];
}
// [...]
setcookie('uname', $uname, time() + 60 * 30);
echo "Cookie value: " . getcookie('uname');

그러나 PHP CLI(예: PHPnit)에서는 작동하지 않습니다.이 경우 XDebug 등의 서드파티 확장 기능을 사용할 수 있습니다(http://xdebug.org/docs/all_functions#xdebug_get_headers) 참조).

cookie 변수는 즉시 필요한 경우 직접 설정해야 하며, 다른 페이지를 로드하면 setcookie 메서드의 결과로 실제 cookie가 설정되었을 것입니다.

setcookie('name', $value, time()+60*30);
$_COOKIE ['name'] = $value;

이것은 AJAX 콜을 사용하여 실행할 수 있습니다.

버튼 클릭 시 cookie를 작성하려면 먼저 cookie를 작성하기 위한 AJAX 호출을 작성해야 합니다.그 후 첫 번째 AJAX 호출이 성공하면 다른 AJAX 호출을 통해 cookie를 얻을 수 있습니다.

    function saveCookie() {
            var base_url = $('#base_url').val();
            var url = base_url + '/index/cookie';
            $.ajax({
                'url': url,
                'type': 'POST',
                'success': function (data) {
                    if (data) {
                        var url = base_url + '/index/get_cookie';
                        $.ajax({
                            'url': url,
                            'type': 'POST',
                            'success': function (response) {
                                var container = $('#show');
                                if (response) {
                                    container.html(response);
                                }
                            }
                        });
                    }
                }
            });
        }

    <button type="button" onclick="saveCookie()">Save Cookie</button>
    <div id="show"></div>

동봉된 파일의 함수를 사용하여 쿠키 값을 반환하고 쿠키를 설정하는 기능으로 해결하는 것과 같은 문제가 있었습니다.

function setCookie($input) {
  setcookie('uname', $input, time() + 60 * 30);
  return $input;
}

if(!isset($_COOKIE['uname'])) {
    $uname  = setCookie($whatever);
} else {
    $uname = $_COOKIE['uname'];
}

echo "Cookie value: " . $uname;

ob_start()ob_flush()를 사용하면 쿠키를 클라이언트에 전송하고 동일한 런타임에 가져올 수 있습니다.이것을 시험해 보세요.

ob_start();
setcookie('uname', $uname, time() + 60 * 30);
ob_flush();
echo "Cookie value: " . $_COOKIE['uname'];

스크립트setcookie()이 함수는 웹 브라우저가 처음 페이지를 요구할 때 실행됩니다(이 경우 새로고침).이 쿠키는 사용자 브라우저에 저장되며 다음 요청이 있을 때까지 또는 다음 새로고침 때까지 서버에서 실행 중인 스크립트에서 사용할 수 없습니다.

다음 요청 시 브라우저는 해당 쿠키를 서버와 어레이로 전송합니다.$_COOKIE는 처음에 설정한 값을 가지며 두 번째 요구 시 브라우저가 반환됩니다.

쿠키 생성과 동시에 상수를 설정했습니다.

define('CONSTANT', true);
return setcookie('cookiename', 'cookie value goes here', time() + 60 * 60 * 24 * 30, '/');

그러면 다음 작업을 즉시 수행할 수 있습니다.

if(isset($_COOKIE['cookiename']) || $_COOKIE['cookiename'] || defined('CONSTANT') && CONSTANT)

언급URL : https://stackoverflow.com/questions/3230133/accessing-cookie-immediately-after-setcookie

반응형