본문 바로가기
Study/php

PHP] 세션을 이용한 로그인/로그아웃

by Answer Choi 2015. 10. 8.
반응형

예제 다운로드

 

이번에는 저번에 만들었던 blog management 에 로그인 로그아웃 기능을 달아보겠습니다.

 

blog_management 예제(mysql 이용) 보기

 

blog_management 예제(mysqli 이용) 보기

 

blog_management 예제(pdo 이용) 보기

 

이전 예제중 pdo사용한 예제를 이용해 보겠습니다.

 

아직 회원 가입은 없습니다.(이건 다음에~)

 

회원 가입도 없고, 아직 회원 DB적용도 하지 않았으니 임의의 아이디와 비번을 지정해서

 

맞으면 로그인 되는 걸로 해보겠습니다.

 

먼저 로그인 페이지입니다.

 

form은 아주 간단합니다.

 

ID와 PW를 적어주고 login 버튼만 눌러주면 됩니다.

 

코드는

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
<html>
<?php
    session_start();
    if(isset($_SESSION['is_login'])){
        header('Location: ./blog_manage_pdo.php');
    }
?>
<head>
    <meta charset="utf-8"/></head
    <title>Login</title>
</head>
<body>
    <H2>This is Log in page</h2>
        <p>Input your ID & PW</p>
    <form action='login_proc.php' method='POST'>
        <p>ID : 
        <input type='text'name='id' /></p>
        <p>PW : 
        <input type='password'name='pw' /></p>
        <input type='submit' value='Login'/>
    </form>
    <?php
    if(isset($_SESSION['msg'])){
        echo $_SESSION['msg'];
        unset($_SESSION['msg']);
    }
   ?>
</body>
</html>
cs

 

중요한 부분은 Line3~8 부분과 Line 23~28 부분입니다.

 

Line 4 : session_start()는 말 그대로 세션을 시작한다 의미인데 이전에 생성한 세션이 있다면 

 

그 정보를 쓰게 됩니다. 없다면 새로 만들게 됩니다.

 

bool session_start ( void )

 

Line 5 : $_SESSION은 session관련 global변수인데, "$_SESSION['is_login']"이라는 변수가

 

선언되었는지를 isset()이라는 메소드를 사용해서 확인합니다.

 

bool isset ( mixed $var [, mixed $var [, $... ]] )

 

뒤에서 나오겠지만 세션이 종료되지 않고, 유지되고 있으면 Line 6의 blog_manage_pod.php

 

이동하게 됩니다.

 

Line 16~22 : 아이디와 비번을 적어서 버튼을 누르면 login_proc.php로 정보를 전달하는 부분입니다.

 

Line 24 : $_SESSION['msg']가 있는지를 확인합니다. 이건 로그인 관련 메세지들을 전달하려고

 

만들었습니다. 뒤에서 더 자세한 설명을~

 

Line 25~26 : 메세지가 있으면 화면에 뿌려주고 변수를 초기화 합니다.

 

unset은 변수를 제거합니다.

 

void unset ( mixed $var [, mixed $var [, mixed $... ]] )

 

이제 로그인을 처리하는 login_proc.php입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
if(($_POST['id']!=null)&&($_POST['pw']!=null)){
    if(($_POST['id']=='answer')&&($_POST['pw']=='1234')){
        $_SESSION['is_login']=true;
        $_SESSION['id']=$_POST['id'];
        header('Location: ./blog_manage_pdo.php');
    }else{
        $_SESSION['msg']='wrong id or pw';
        header('Location: ./login.php');
    }
}else{
    $_SESSION['msg']='null id or pw';
    header('Location: ./login.php');
}
?>
cs

 

앞서 로그인할때 id와 pw를 전달했습니다.

 

둘중 하나도 null이 아닐경우 Line 3으로~ 하나라도 널이면 Line 12로 빠집니다.

 

Line 4~7 : id와 pw가 정확할 경우 $_SESSION['is_login']변수에 true를 $_SESSION['id']변수에 

 

넘어온 id를 넣고, blog_manage_pdo.php로 이동합니다.

 

Line 8~11 : 만약 id나 비번이 다르다면 $_SESSION['msg']에 메세지를 넣고 login.php로 이동합니다.

 

이부분이 위 login.php에서 메세지를 뿌려주는 역할을 합니다.

 

Line 12~15 : 아이디나 비번중 하나라도 안쓴게 있다면 역시 메세지를 넣고 login.php로 이동합니다.

 

비번이나 아이디가 틀린경우입니다.

 

코드에 보면 id는 answer pw는 1234인데 잘못된 아이디와 비번입니다.

 

login 버튼을 누르게 되면 버튼밑에 메세지가 나타납니다.

 

이런식으로 글로벌변수인 $_SESSION으로 메세지를 전달하게 되면 주소창에 메세지가 나타나지 않아

 

더 깔끔하게 됩니다.

 

id나 pw를 입력없이 로그인한 경우에도 메세지를 띄워주게 됩니다.

 

비번을 입력하지 않고 login을 하게되면

 

입력하지 않았다는 메세지가 보여지게 됩니다.

 

이제 로그인이 정상적으로 되었을 경우입니다.

 

기존에 없었던 부분입니다.

 

위에서 로그인이 정상적으로 되면 $_SESSION['is_login']을 true로~ $_SESSION['id']에 id를 넣었는데

 

위 네모부분에 그 변수들을 이용한 코드가 사용되었습니다.

 

코드를 보시면

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
if(!isset($_SESSION['is_login'])){
    $_SESSION['msg']='need a login!!';
    header('Location : ./login.php');
}else{
    if(isset($_SESSION['id'])){
        echo 'Welcome to '.$_SESSION['id'];
    }else{
        echo 'Welcome to blog management';
    }
    echo '<form action="logout.php" >
    <input type="submit" value="logout"/>
    </form>'
}
?>
cs

Line 3~5 : $_SESSION['is_login] 변수가 없는경우(로그인이 안된경우) 들어오게 됩니다.

 

Line 4 : $_SESSION['msg']에 메세지를 넣고 

 

Line 5 : login page로 가게 됩니다.

 

로그인이 되지 않은 상태에서 바로 blog_manage_pdo.php에 접속해 보겠습니다.

 

이런식으로 바로 로그인 페이지로 이동하고 메세지를 띄워줍니다.

 

Line 6~11 : 정상적으로 로그인이 된 경우로 $_SESSION['id']에서 id를 화면에 뿌려줍니다.

 

Line 12~14 : 로그아웃 버튼을 생성하고, 클릭시 logout.php로 이동합니다.

 

정상 로그인화면입니다.

 

id 인사말과 로그아웃버튼이 생성되었습니다.

 

logout.php입니다.

 

1
2
3
4
5
<?php
session_start();
session_destroy();
header('Location: ./login.php');
?>
cs

 

Line 3 : session관련 모든 데이터를 파괴합니다.

 

bool session_destroy ( void )

 

Line 4 : 로그인 페이지로 이동하게 됩니다.

 

로그아웃을 클릭한 화면입니다.

 

이렇게 첫화면으로 돌아오게 됩니다.

 

반응형

인기글