1

PHP 로그인 - 쿠키를 통한 아이디 저장(아이디 기억하기)

PHP 로그인 - 쿠키를 통한 아이디 저장(아이디 기억하기)

노아의 블로그

    목차
반응형

쿠키에 대해서 저번시간에 설명을 드렸습니다.

로그인 페이지에서 로그인하고 메인 페이지로 넘어갔을떄, 어떻게 로그인 정보를 유지할것인가?

로그인 정보가 없으니 또 로그인해야되고 또 로그인해야되고...너무 비효율적인 방법이 아니겠습니까.

그 해결책이 바로 쿠키이죠.

 

로그인을 최초 한번 성공했을시, 서버는 쿠키에 사용자 로그인 정보를 담아서 클라이언트로 보내고

클라이언트는 다음 요청부터는 로그인을 안해도 되고 로그인 정보가 있는 쿠키와 같이 요청하면 서버는 사용자를 알 수 있죠.

 

PHP에서 쿠키를 이용해 로그인을 유지해봅시다.

 

하지만 감이 안오실분들을 위해서 먼저 '아이디 기억하기'를 만들어보겠습니다.

어느 사이트에나 다 있는 아이디 기억하기죠. 쿠키를 배우면 어떤 원리로 동작하는지 알 수 있습니다.

 

먼저, 쿠키를 발행할 시점이 어느때일지를 생각해봅시다.

아무때나 발행할까요? 

바로 로그인을 성공했을시 서버측에서 너 로그인 했어 쿠키 발급! 도장 쾅쾅 찍어주는겁니다.

 

login.php에서 봅시다.

 

<?php 
    $id = $_POST['id'];
    $password = $_POST['password'];
    $sql = "SELECT * FROM test_tbl where id = '" . $id . "' and pass = '" . $password . "'"; 
    $result = mysqli_query($conn, $sql); //sql 실행
    //login 
    if (mysqli_num_rows($result) > 0) {
        while($row = mysqli_fetch_assoc($result)) {
        echo $row["name"]. " USER WELCOME!!!<br>";
    }
    //login faild
} else {
    echo "<br>login faild.";
}
?>

if문 안에서 로그인이 일어나군요.

if문 안에서 그럼 쿠키를 만들어봅시다.

쿠키는 setcookie 라는 메서드를 통해 만들 수 있습니다.

setcookie("안녕","하세요",time() + 3600,"/");

쿠키도 변수..배열...등등과 같이 키,벨류로 이루어져있습니다. 안녕이라는 쿠키 출력해 하면 하세요가 출력되는것이죠.

그리고 쿠키에는 수명이 있습니다. 한번 로그인하면 영원히 로그인될수있는건 아니잖아요? 그러니 시간을 주어서 얼마나 쿠키를 유지할것인지 설정이 가능합니다. time() 메서드는 현재 시간을 나타냅니다. 그러므로 현재 시간 + 3600이니까 3600초의 수명이 주어진것입니다.

마지막으로 "/"은 경로입니다. 쿠키가 어디 경로에서 존재할것인지. 그런걸 따지는겁니다.

 

그렇다면 우리의 목표는 아이디 기억하기(아이디 자동입력) 기능 입니다.

생각을 해봅시다.

(로그인 했을때 쿠키에 id를 저장하고 경로는 login.php로 해야겠다. 로그인 창 id에 쿠키를 출력시켜야지.)

 

<?php 
    $id = $_POST['id'];
    $password = $_POST['password'];
    $sql = "SELECT * FROM test_tbl where id = '" . $id . "' and pass = '" . $password . "'"; 
    $result = mysqli_query($conn, $sql); //sql 실행
    //login 
    if (mysqli_num_rows($result) > 0) {
        while($row = mysqli_fetch_assoc($result)) {
        echo $row["name"]. " USER WELCOME!!!<br>";
        
        #User Cookie 
        setcookie("userid",$row["id"],time() + 3600,"login.php");
        echo $_COOKIE["userid"] . "is Cookie value!";
    }
    //login faild
} else {
    echo "<br>login faild.";
}
?>

이런 코드가 완성이 됩니다.

 

이제 로그인을 해보겠습니다.

 

Db에 있는 회원 데이터 id:select / pw : mysql 을 입력하니

select is cookie value! 가 나왔습니다.

방금 입력한 아이디가 쿠키의 값이라고 떴네요. 

 

쿠키는 사용자 id를 가지고있습니다.

이제 id란에 select가 자동으로 들어가게 하고싶으면 어떻게 할까요?

 

네. 바로 id 입력란에 쿠키의 값을 출력하면 되겠지요.

id 입력란은 저번시간에 html에서 추가했습니다. html에서 id입력란의 값을 바꾸어봅시다.

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form method="post" action="">
    	id:<input type="text" name="id" value="<?php echo $_COOKIE["userid"]?>"> <br>
    	password:<input type="text" name="password"> <br>
    	<input type="submit" value="Login">
    <form/>
</body>
</html>

id:<input type="text" name="id" value="<?php echo $_COOKIE["userid"]?>"> <br>

input 태그의 value 값을 userid라는 쿠키를 출력한 결과로 받고있습니다.

 

input태그의 value속성은 input태그 안에있는 값을 설정합니다.

$_COOKIE는 $_POST와 비슷한 COOKIE가 저장되어있는 변수입니다. "userid"라는 쿠키를 출력하네요.

userid쿠키 에는 뭐가있나여. select mysql 로 로그인했으니까 id 인 select가 있죠.

 

결과적으로 select가 input태그 입력란에 출력되는것입니다. 함께보시죠.

 

그럼 DB에 저장되어있는 사용자 id:Yong password:TestPass를 입력한다면?

당연히 id란에는 Yong가 나올것이라고 예상했지만? 

왜 전에 로그인한 사용자의 id select가 나올까요?

 

이는 작동 방식을 봐야합니다.

 

지금 클라이언트에는 전에 로그인한 사용자의 id select 가 저장되어있는 쿠키가 있습니다.

지금 사용자 Yong는 자신의 아이디와 비번을 입력합니다. 그리고 전에 로그인한 사용자 쿠키를 같이 요청합니다.

 

그러면 서버는 db에서 Yong을 찾고 로그인 통과. Welcome yong! 를 출력하고 쿠키를 제작합니다.

이제 input태그에 자동입력하기위해

클라이언트에서 보낸 쿠키 userid를 찾는데 클라이언트에서 보낸것은 전에 로그인한 사용자 정보가 담긴 쿠키니까

select가 나오는것이죠.

 

하지만 서버에서 방금 만든 따끈따끈한 쿠키는 분명 Yong가 저장되있을겁니다! 그게 서버가 응답하고 클라이언트가 받은 쿠키고요.

그렇다면? 새로고침을해서 다시 요청을하면 어떤 결과가 나올까요?

네. 우리가 생각한 결과가 나왔네요.

Yong이 자동입력이 되었습니다!

 

정확히 이해가 안되신다면 역시 그림으로!

 

그럼 다음 요청은?

 

 

 

새로만든 쿠키 userid = yong가 오겠죠?

이런식으로 생각하시면 됩니다. 

 

 

 

 

 

반응형

'WEB > PHP' 카테고리의 다른 글

PHP - 로그아웃 구현  (0) 2023.04.22
PHP 로그인 인증 - Session  (0) 2023.04.22
PHP - 로그인 인증(권한) 구현 - Cookie 방식  (0) 2023.04.21