Front-End/PHP

[PHP] 쿠키(Cookie), 세션(Session)

챌링킴 2021. 7. 17. 21:09
반응형

1) 쿠키(Cookie)란?


- 웹 사이트에 접속할 때 서버에 의해 사용자의 컴퓨터에 저장되는 정보를 의미한다.
- 클라이언트 측의 컴퓨터(브라우저)에 데이터를 남겨 필요할 때 마다 사용한다.
- 데이터 형태는 key와 value로 구성한다.
- 문자열로만 이루어져 있다.
- 4kb이상 저장할 수 없다.
- 서버당 1개의 저장소를 사용한다.

 

개발자 화면 내 쿠키,세션 보는 창

 

2) 쿠키 사용방법

 

1. 쿠키를 만드는 방법
setcookie(쿠키이름, 값, 만료시간, 저장위치, 도메인정보, 프로토콜);

<?php
    // key: userid, value: apple, 현재시간+(60초*3), 현재디렉토리
    setcookie("userid", "apple", time() + (60*3), "/");
?>

 

time( )
- 현재 날짜 시간을 가져오는 함수

isset( ) 
- 데이터가 존재하는지 여부(true, false)를 반환

 

2. 쿠키를 읽어오는 방법
변수 = $_COOKIE[쿠키이름];

<?php
    if(!isset($_COOKIE['userid'])){
        echo "<p>쿠키가 존재하지 않습니다</p>";
    }else{
        echo "<p>쿠키가 존재합니다</p>";
        echo "<p>저장된 쿠키의 값 : {$_COOKIE['userid']}</p>";
    }
?>

 

3. 쿠키를 변경하는 방법
다시 setcookie에 의해 재설정

4. 쿠키를 삭제하는 방법
쿠키 만료시간을 0 또는 과거시간으로 변경해주면 자동으로 삭제

 

 

3) 세션(session)이란?

- 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 의미한다.
- 서비스가 돌아가는 서버측에 데이터를 저장한다.
- 키와 값으로 저장되는 형태로 구성돼있다.
- 키 값만을 클라이언트 측으로 남겨둔다.
- 사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지가 만료시간이다.
- 브라우저는 필요할 때마다 키값을 이용하여 서버에 저장된 데이터를 사용한다.

 

4) 세션 사용방법


1. php 세션 사용
- php 파일 제일 상단에 session_start(); 을 명시한다.

2. 세션 변수를 만드는 방법
$_SESSION["키"] = 값;

<?php
    session_start();
    // session_id() : 세션 id의 값을 확인 (74b0v9i3i29u0i9964ntqeuecc)
    $_SESSION['userid'] = "apple";
    $_SESSION['name'] = "김사과";

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>세션 - 1</title>
</head>
<body>
    <h2>세션 - 1</h2>
    <p>세션 id : <?=session_id()?></p>
    <p>세션 id의 변수 userid값 : <?=$_SESSION['userid']?></p>
    <p>세션 id의 변수 name값 : <?=$_SESSION['name']?></p>
</body>
</html>


3. 세션 변수를 수정하는 방법
$_SESSION["키"] = 새로운 값;

4. 세션 변수를 삭제하는 방법
session_unset();


5) 세션 시간 설정 및 지속시간 설정되는 우선순위(1,2,3위)
- 페이지에다가 설정하기(php 코드로 세션시간을 설정)
    session.gc_maxlifetime = 1440;  // 24분


- php.ini에 설정하기
    C:\php7\php.ini
    session.gc_maxlifetime = 1440;  // 24분


- 아파치 설정

 

 

6) 세션을 활용한 로그인 예제

 

login창

<?php
    session_start();
    // echo $_SESSION['id'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>로그인</title>
</head>
<body>
<?php
    if(!isset($_SESSION['id'])){
?>
    <form method="post" action="3-loginP.php">
        <p><label>아이디 : <input type="text" name="userid"></label></p>
        <p><label>비밀번호 : <input type="password" name="userpw"></label></p>
        <p><input type="submit" value="로그인"></p>
    </form>
<?php
    }else{
?>
    <p><?=$_SESSION['id']?>님 환영합니다.</p>
    <p><a href="./3-logout.php">로그아웃</a></p>
<?php
    }
?>
</body>
</html>

 

- 로그인 처리 기능

<?php
    session_start();
    $userid = $_POST['userid'];
    $userpw = $_POST['userpw'];

    if($userid == "admin" && $userpw == "1234"){
    // location.href='3-login.php' -> 캐싱되지 않음
        $_SESSION['id'] = $userid;
        echo "<script>alert('로그인 되었습니다');location.href='3-login.php';</script>";
    }else{
    // history.back(); -> 캐싱됨
        echo "<script>alert('아이디 또는 비밀번호를 확인하세요');history.back();</script>";
    }
?>

 

- 로그아웃 창

<?php
    session_start();
    session_unset();
    echo "<script>alert('로그아웃 되었습니다');location.href='3-login.php';</script>";
?>
반응형