PHP 쿠키
쿠키는 종종 사용자를 식별하는 데 사용됩니다.
쿠키란 무엇인가요?
쿠키는 서버에 의해 생성되어 User-Agent(일반적으로 브라우저)로 전송됩니다. 브라우저는 쿠키 키/값을 특정 디렉터리의 텍스트 파일에 저장하고 다음에 동일한 웹사이트를 요청합니다. 쿠키는 서버로 전송됩니다(브라우저가 쿠키를 활성화하도록 설정된 경우). 쿠키의 이름과 값은 서버측 개발자가 정의할 수 있으므로 서버는 사용자가 정당한 사용자인지, 재로그인이 필요한지 등을 알 수 있습니다. 서버는 쿠키에 포함된 정보를 설정하거나 읽을 수 있습니다.
쿠키는 어떻게 생성하나요?
쿠키를 설정하려면 setcookie() 함수를 사용합니다.
참고: setcookie() 함수는 <html> 태그 앞에 배치되어야 합니다.
구문
setcookie(이름, 값, 만료, 경로, 도메인);
예제 1
다음 예에서는 이름을 생성합니다. "user"에 대한 쿠키가 되어 "runoob" 값을 할당합니다. 또한 이 쿠키가 1시간 후에 만료되도록 지정합니다.
<?php setcookie("user", "runoob", time()+3600); ?> <html> .....
참고: 쿠키 값은 쿠키를 보낼 때 자동으로 URL 인코딩되고 검색될 때 자동으로 디코딩됩니다. (URL 인코딩을 방지하려면 setrawcookie()를 대신 사용하세요.)
예제 2
쿠키 만료 시간을 다른 방법으로 설정할 수도 있습니다. 이는 초를 사용하는 것보다 더 간단할 수 있습니다.
<?php $expire=time()+60*60*24*30; setcookie("user", "runoob", $expire); ?> <html> .....
위 예시에서는 만료 시간이 1개월(60초 * 60분 * 24시간 * 30일)로 설정되어 있습니다.
쿠키 구성 및 적용
Setcookie(문자열 이름, 문자열 값, int 만료, 문자열 경로, 문자열 도메인, intsecure); 쿠키 변수 이름 식별자입니다. 일반 변수 이름을 사용하는 것처럼 PHP에서
쿠키 변수를 참조하는 데 사용할 수 있습니다. 값은 쿠키 변수의 초기 값이고, 만료는 쿠키 변수의 유효 시간을 나타내며, 도메인은 쿠키 변수의 웹사이트를 나타냅니다. 보안은 https가 안전하게 전송되는 경우에만 유효합니다.
SetCookie("Cookie", "cookievalue",time()+3600, "/forum", ".365shequ.com", 1);
이름, 값이어야 함 밀리초 시간()+3600=1시간 저장 경로 도메인 저장 HTTPS
PHP 쿠키 읽기
현재 클라이언트를 읽으려면 슈퍼 전역 변수 $_COOKIE 배열을 사용합니다. 생성
에 저장된 쿠키에 대한 새 PHP 파일 set_cookie.php, 코드는
print_r($_COOKIE);
echo $_COOKIE['foo'];
쿠키가 성공적으로 설정되었는지 확인
쿠키 만료 시간 설정세 번째 매개변수는 Unix 타임스탬프입니다0 기본값, 브라우저를 닫으면 만료됩니다time() + 86400 one daysetcookie('foo', 'a', time() + 86400 );설정 후 브라우저를 닫았다가 다시 열어서 쿠키가 있는지 확인해주세요쿠키 경로를 설정하세요
setcookie('bar', 'b', time() + 86400, '/uploads');
• bar라는 PHP 페이지를 / 디렉토리 Cookie에서 읽을 수 있는지 테스트해 보세요
· /uploads 아래의 PHP 페이지에서 foo라는 쿠키를 읽을 수 있는지 테스트하십시오. 다른 하위 디렉토리를 생성하고 해당 하위 디렉토리의 PHP 페이지에서 읽을 수 있는지 테스트하십시오.
경로가 설정되면 해당 경로 아래의 쿠키는 해당 경로 아래의 페이지에서만 읽을 수 있습니다.
이 쿠키 도메인 이름으로 설정됩니다. setcookie('key', 'val', time() + 86400, '/uploads', '.your.domain');
php.cn의 쿠키를 뉴스로 설정합니다. sports.365jia.cn 아래의 페이지에서는 읽을 수 없으며 그 반대도 마찬가지입니다
모든 2차 도메인 이름이 쿠키를 공유하도록 하려면 도메인을 .php.cn으로 설정해야 합니다
쿠키 제한 문제대부분의 브라우저에는 쿠키 개수가 50개를 초과할 수 없도록 규정되어 있습니다. 일부 브라우저는 30개로 제한하기도 합니다.
브라우저에서는 쿠키 크기에 제한이 있으며 일반적으로 4K 크기를 초과할 수 없습니다.
쿠키 보안 문제피시방에서 인터넷 서핑을 한 후 컴퓨터를 종료하지 않으면 귀하의 컴퓨터를 사용하는 다른 사람들이 귀하가 방문한 모든 웹사이트의 기록과 해당 웹사이트에 저장된 쿠키 내용을 볼 수 있습니다. 중요한 데이터(사용자 이름, 비밀번호, 카드번호, 휴대폰 번호, ID 번호...)가 쿠키에 저장되면 위험합니다.
따라서 중요한 데이터는 쿠키에 저장할 수 없으므로 반드시 저장해야 하는 경우
쿠키 주의사항서버에 의존해야 합니다. 쿠키는 공유할 수 없습니다
동일한 컴퓨터의 다른 브라우저는 쿠키를 공유할 수 없습니다
동일한 브라우저, 다른 도메인 이름은 여전히 쿠키를 공유할 수 없습니다
같은 브라우저라도 다른 쿠키는 동일한 도메인 이름의 경로는 공유할 수 없습니다.
쿠키 값을 어떻게 검색하나요?PHP의 $_COOKIE 변수는 쿠키 값을 검색하는 데 사용됩니다.
다음 예에서는 "user"라는 쿠키의 값을 검색하여 페이지에 표시합니다.
<?php // 输出 cookie 值 echo $_COOKIE["user"]; // 查看所有 cookie print_r($_COOKIE); ?>
다음 예에서는 isset() 함수를 사용하여 여부를 확인합니다. 쿠키가 설정되었습니다:
<html> <head> <meta charset="utf-8"> <title> php中文网(php.cn)</title> </head> <body> <?php if (isset($_COOKIE["user"])) echo "欢迎 " . $_COOKIE["user"] . "!<br>"; else echo "普通访客!<br>"; ?> </body> </html>
쿠키를 삭제하는 방법은 무엇인가요?
쿠키 삭제 시 만료일을 과거 시점으로 변경해야 합니다.
삭제된 인스턴스:
<?php // 设置 cookie 过期时间为过去 1 小时 setcookie("user", "", time()-3600); ?>
내 브라우저가 쿠키를 지원하지 않으면 어떻게 해야 하나요?
애플리케이션이 쿠키를 지원하지 않는 브라우저를 처리해야 하는 경우 다른 방법을 사용하여 애플리케이션의 페이지 간에 정보를 전달해야 합니다. 한 가지 방법은 양식을 통해 데이터를 전달하는 것입니다(양식 및 사용자 입력은 이 튜토리얼의 이전 장에서 다뤘습니다).
다음 양식은 사용자가 "제출" 버튼을 클릭할 때 "welcome.php"에 사용자 입력을 제출합니다.
<html> <head> <meta charset="utf-8"> <title> php中文网(php.cn)</title> </head> <body> <form action="welcome.php" method="post"> 名字: <input type="text" name="name"> 年龄: <input type="text" name="age"> <input type="submit"> </form> </body> </html>
아래 표시된 대로 "welcome.php" 파일에서 값을 검색합니다.
<html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> 欢迎 <?php echo $_POST["name"]; ?>.<br> 你 <?php echo $_POST["age"]; ?> 岁了。 </body> </html>
반박
실제 개발에서 흔히 저지르는 실수는 setcookie 이후 $_COOKIE를 통해 직접 데이터를 얻는 것입니다
setcookie ('foo', 1);
print_r($_COOKIE);
echo $_COOKIE['foo'];
위의 경우, 쿠키를 얻는 것은 불가능합니다. 방금 설정한 것은 제목에서 언급한 문제입니다.
원리는 매우 간단합니다. 쿠키는 실제로 브라우저에 저장되며, 현재 페이지가 브라우저로 반환된 후에만 setcookie 값은 브라우저에 저장됩니다. 페이지를 두 번째 방문하면 PHP는 브라우저의 쿠키
및 $_COOKIE에 있는 데이터를 읽을 수 있습니다. 데이터는 매번 클라이언트에서 서버로 가져옵니다. 페이지가 요청되었습니다
이래서 당시에 설정되어 있어서 당시에 검색할 수 없었습니다
문제를 해결하는 한 가지 방법은 저장하는 것입니다. 값을 지정한 후 프로그램이 새로 고쳐집니다.
바로 페이지로 이동하세요.다음 섹션