PHP Cookies


cookie 는 사용자를 식별하는데 종종 사용된다.


What is a Cookie?

cookie 는 사용자를 식별하는데 종종 사용된다. cookie 는 서버가 사용자 컴퓨터에 내장하는 작은 파일입니다. 같은 컴퓨터가 브라우져로 페이지를 요청할 때마다, cookie 도 함께 보냅니다.  PHP 로 cookie 를 생성하고 그 값을 가져올 수 있습니다.

http://courses.cs.washington.edu/courses/cse154/14sp/lectures/slides/images/cookie_exchange.png


Myths about cookies

  • Myths(근거 없는 믿음):
    • Cookies are like worms/viruses and can erase data from the user's hard disk.
    • Cookies are a form of spyware and can steal your personal information.
    • Cookies generate popups and spam.
    • Cookies are only used for advertising.

  • Facts:
    • Cookies are only data, not program code.
    • Cookies cannot erase or read information from the user's computer.
    • Cookies are usually anonymous (do not contain personal information).
    • Cookies CAN be used to track your viewing habits on a particular site.

How to Create a Cookie?

setcookie() 함수는 cookie를 설정하는데 사용됩니다.

Note: setcookie() 함수는 <html> 태그 앞에 와야 합니다.

Syntax

setcookie(name, value, expire, path, domain);

Example 1

아래의 예에서, 우리는 "user" 라는 이름의 쿠키를 생성하고, 그것에 "Alex Porter" 라는 값을 지정합니다. 그리고 또한 그 쿠키는 1시간 후에 만료 되도록 지정합니다.

<?php
setcookie("user", "Alex Porter", time()+3600);
?>

<html>
.....

Note: 쿠키의 값은 보낼 때 자동적으로 URLencoded 되고, 받을 때 자동적으로 decoded 됩니다. (URLencoding 을 피하려면, 대신에 setrawcookie() 를 사용합니다.).

Example 2

쿠키의 만료 시간을 다른 방법으로도 설정할 수 있습니다. 그것은 초(seconds)를 사용하는 것 보다 쉬울 수 있습니다.

<?php
$expire=time()+60*60*24*30;
setcookie("user", "Alex Porter", $expire);
?>

<html>
.....

위의 예에서 만료 시간을 한달로 설정합니다. (60 sec * 60 min * 24 hours * 30 days).


How to Retrieve a Cookie Value?

PHP $_COOKIE 변수는 쿠키 값을 검색하는데 사용됩니다. 

아래의 예에서 "user" 라는 이름의 쿠키의 값을 가져다가 페이지에 표시합니다. :

<?php
// Print a cookie
echo $_COOKIE["user"];

// A way to view all cookies
print_r($_COOKIE);
?>

다음 예에서는 쿠키가 설정되어 있는지 확인하기 위해서 isset() 함수를 사용합니다. :

<html>
<body>

<?php
if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br>";
else
  echo "Welcome guest!<br>";
?>

</body>
</html>


How to Delete a Cookie?

쿠키를 삭제할 때, 만료 날자가 과거인지를 확인해야 합니다. 

Delete example:

<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>


What if a Browser Does NOT Support Cookies?

응용 프로그램이 쿠키를 지원하지 않는 브라우져를 다루는 경우에는, 당신의 응용프로그램에서 한페이지에서 다른 페이지로 정보를 전달하는 다른 방법을 사용해야 합니다. 한가지 방법은 폼(forms)을 통한 데이타 전달입 니다.

아래의 폼은 사용자가 "Submit"  버튼을 클릭하면 사용자 입력을 "welcome.php"에 전달 합니다. :

<html>
<body>

<form action="welcome.php" method="post">
Name: <input type="text" name="name">
Age: <input type="text" name="age">
<input type="submit">
</form>

</body>
</html>

다음과 같이 "welcome.php" 파일에서 값을 회수합니다.:

<html>
<body>

Welcome <?php echo $_POST["name"]; ?>.<br>
You are <?php echo $_POST["age"]; ?> years old.

</body>
</html>


How to view the cookies on my computer?

  • Chrome: F12 → Resources → Cookies; Firefox: F12 → Cookies

Clearing cookies in your browser

  • Chrome: Wrench Chrome wrench icon → History → Clear all browsing data...
  • Firefox: Firefox menu → Options → Privacy → Show Cookies... → Remove (All) Cookies


Examples

counter example:

<!DOCTYPE html>
<?php
$expire = time()+3600;

setcookie("user","Jun Ji",$expire);
if( isset($_COOKIE["user"]) )
    $user = $_COOKIE["user"];
else
    $user = "guest";
    
if ( !isset($_COOKIE['visits']) )
    $visits = 0;
else
    $visits = $_COOKIE['visits'] + 1;

setcookie("visits", $visits, $expire);
?>

<html>
    <body>
    <?php
        echo "Welcome " . $user . "!<br>";
        if ( $visits > 1)
            echo "You visited this site " . $visits . " times.";
        else
            echo "Welcome to this site ! This is your first visit !";
    ?>
    </body>
</html>