setcookie () 후 즉시 $ _COOKIE에 액세스
PHPsetcookie () 후 즉시 $ _COOKIE에 액세스
PHP에서 setcookie () 함수를 호출 한 직후에 쿠키 값 ($ _COOKIE 사용)에 액세스하려고합니다. 그렇게하면 $ _COOKIE [ 'uname']이 설정되지 않습니다. 왜?
그러나 $ _COOKIE [ 'uname']는 다음에 스크립트를 실행할 때 (예 : 페이지를 새로 고친 후) 예상대로 설정됩니다.
setcookie('uname', $uname, time() + 60 * 30);
echo "Cookie value: " . $_COOKIE['uname'];
해결법
-
==============================
1.$ _COOKIE는 웹의 상태를 알 수 없으므로 페이지가로드 될 때 설정됩니다. 즉각적인 액세스를 원할 경우 $ _COOKIE [ '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); }
-
==============================
2.쿠키는 응답이 클라이언트로 되돌려 보내질 때까지 설정되지 않으며, 그 후에 클라이언트로부터의 다음 요청이있을 때까지는 PHP에서 사용할 수 없습니다.
쿠키는 응답이 클라이언트로 되돌려 보내질 때까지 설정되지 않으며, 그 후에 클라이언트로부터의 다음 요청이있을 때까지는 PHP에서 사용할 수 없습니다.
그러나 스크립트에 쿠키를 설정하면 다음을 수행 할 수 있습니다.
setcookie('uname', $uname, time()+60*30); $_COOKIE['uname'] = $uname;
-
==============================
3.setcookie ()를 호출 한 직후에 쿠키 값에 액세스하려면 $ _COOKIE를 사용할 수 없습니다. 그 이유는 프로토콜의 특성 때문입니다 (https://tools.ietf.org/html/rfc6265 참조). setcookie ()를 사용할 때 나머지 HTTP 헤더와 함께 클라이언트로 보낼 쿠키를 정의합니다 (http://php.net/manual/en/function.setcookie.php 참조). 그러나 $ _COOKIE에는 클라이언트 (http://php.net/manual/en/reserved.variables.cookies.php)에서 HTTP 쿠키를 통해 현재 스크립트에 전달 된 변수가 들어 있습니다.
setcookie ()를 호출 한 직후에 쿠키 값에 액세스하려면 $ _COOKIE를 사용할 수 없습니다. 그 이유는 프로토콜의 특성 때문입니다 (https://tools.ietf.org/html/rfc6265 참조). setcookie ()를 사용할 때 나머지 HTTP 헤더와 함께 클라이언트로 보낼 쿠키를 정의합니다 (http://php.net/manual/en/function.setcookie.php 참조). 그러나 $ _COOKIE에는 클라이언트 (http://php.net/manual/en/reserved.variables.cookies.php)에서 HTTP 쿠키를 통해 현재 스크립트에 전달 된 변수가 들어 있습니다.
setcookie ()를 호출 한 후 $ _COOKIE를 변경할 때 - 여기에있는 몇 가지 답변과 마찬가지로 클라이언트의 쿠키 만 더 이상 포함하지 않습니다. 이로 인해 응용 프로그램에 사용 된 제 3 자 코드의 가정이 방해 될 수 있으며 원하지 않는 사이트 효과가 발생할 수 있습니다. 그래서 일반적으로 좋은 연습이 아니며 setcookie () 호출이 자신의 코드의 일부일 때만 옵션입니다.
동일한 요청 내에서 setcookie ()로 값을 설정하는 깨끗하고 투명한 방법은 headers_list ()를 사용하는 것입니다 (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 (예 : PHPUnit)에서는 작동하지 않습니다. 이 경우 XDebug와 같은 타사 확장을 사용할 수 있습니다 (http://xdebug.org/docs/all_functions#xdebug_get_headers 참조).
-
==============================
4.다른 페이지를로드 할 때 진짜 쿠키가 setcookie 메소드의 결과로 설정 될 때까지 즉시 쿠키 변수를 설정해야합니다.
다른 페이지를로드 할 때 진짜 쿠키가 setcookie 메소드의 결과로 설정 될 때까지 즉시 쿠키 변수를 설정해야합니다.
setcookie('name', $value, time()+60*30); $_COOKIE ['name'] = $value;
-
==============================
5.ob_start () 및 ob_flush ()를 사용하면 클라이언트에 쿠키를 보내고 동일한 런타임에 검색 할 수 있습니다. 이 시도:
ob_start () 및 ob_flush ()를 사용하면 클라이언트에 쿠키를 보내고 동일한 런타임에 검색 할 수 있습니다. 이 시도:
ob_start(); setcookie('uname', $uname, time() + 60 * 30); ob_flush(); echo "Cookie value: " . $_COOKIE['uname'];
-
==============================
6.스크립트의 setcookie () 함수는 웹 브라우저가 처음으로 페이지를 요청할 때 실행되며, 경우에 따라 다시로드됩니다. 이 쿠키는 사용자 브라우저에 저장되며 다음 요청 또는 귀하의 경우 다음 재로드까지 서버에서 실행중인 스크립트에서 사용할 수 없습니다.
스크립트의 setcookie () 함수는 웹 브라우저가 처음으로 페이지를 요청할 때 실행되며, 경우에 따라 다시로드됩니다. 이 쿠키는 사용자 브라우저에 저장되며 다음 요청 또는 귀하의 경우 다음 재로드까지 서버에서 실행중인 스크립트에서 사용할 수 없습니다.
다음 요청시 브라우저는 해당 쿠키를 서버에 보내고 배열 $ _COOKIE는 처음에 설정 한 값을 가지며 브라우저는 두 번째 요청시 다시 전송됩니다.
-
==============================
7.나는 쿠키가 생성되는 동시에 상수를 설정했다.
나는 쿠키가 생성되는 동시에 상수를 설정했다.
define('CONSTANT', true); return setcookie('cookiename', 'cookie value goes here', time() + 60 * 60 * 24 * 30, '/');
나는 즉시 다음을 수행하여 무언가를 할 수 있습니다.
if(isset($_COOKIE['cookiename']) || $_COOKIE['cookiename'] || defined('CONSTANT') && CONSTANT)
-
==============================
8.AJAX 호출을 사용하여이 작업을 수행 할 수 있습니다.
AJAX 호출을 사용하여이 작업을 수행 할 수 있습니다.
버튼을 클릭 할 때 쿠키를 생성하려면 먼저 AJAX 호출을 만들어 쿠키를 만든 다음 첫 번째 AJAX 호출 성공을 통해 쿠키를 얻기 위해 다른 AJAX를 호출 할 수 있습니다.
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>
from https://stackoverflow.com/questions/3230133/accessing-cookie-immediately-after-setcookie by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP에서 가중치로 무작위 결과를 생성 하시겠습니까? (0) | 2018.09.09 |
---|---|
MySQL 데이터의 자동화 된 또는 정기적 인 백업 (0) | 2018.09.09 |
PHP를 사용하여 SQL Server에서 문자열을 이스케이프 처리하는 방법은 무엇입니까? (0) | 2018.09.09 |
데이터베이스 결과로부터 다차원 배열을 생성하는 재귀 함수 (0) | 2018.09.09 |
PHP에서 브라우저 언어 감지 (0) | 2018.09.09 |