$_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를 통해 현재 스크립트로 전달된 변수가 포함되어 있습니다.
★★★★★★★★★★를 변경할 때$_COOKIE
후setcookie()
권장하는 처럼 - 되어 있지 않습니다 - 클라이언트로부터의 쿠키만 있지 않습니다.이로 인해 어플리케이션에서 사용되는 서드파티 코드로 이루어진 가정이 방해되어 원치 않는 사이트 효과가 발생할 수 있습니다.따라서 일반적으로 이것은 좋은 방법이 아닙니다.또한 이 방법은 콜이 다음 콜이 있을 때에만 선택할 수 있습니다.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
'source' 카테고리의 다른 글
Chrome-devtools에서 실제로 모든 JS 소스를 검색할 수 있습니까? (0) | 2022.11.05 |
---|---|
stdClass 유형의 개체를 어레이로 사용할 수 없습니까? (0) | 2022.11.05 |
Ubuntu 18.04에서 MariaDB 10.01을 완전히 삭제합니다. (0) | 2022.11.05 |
목록 항목의 역순 (0) | 2022.10.27 |
jQuery 이벤트 키 누르기:어떤 키를 눌렀습니까? (0) | 2022.10.27 |