2017. 8. 23. 21:35ㆍWebHacking/Web
< 로그인 인증 페이지 만들기 >
# 로그인 인증에 앞서 session 테이블을 생성한다
- 로그인 한 사용자를 저장하는 테이블
- 해당 테이블 내의 데이터가 존재한다면 그 사용자는 이미 로그인 된 사용자이다
- 이전 게시글에서 생성한 bbs DB에 session 테이블을 생성한다
- mysql> CREATE TABLE session VALUE( no int, user_id varchar(15), session_id char(30) );
no : 사용자 식별번호
user_id : 유저 아이디
session_id : 세션 아이디
[ http://192.168.6.123/index.php 소스코드 ] - 게시판 첫 페이지
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | <?php // 세션사용을 하기위한 필수메서드, 세션사용선언 session_start(); // #1 MySQL 연결 $db = mysql_connect( localhost , 'root' , 'password1!' ); if( !$db ){ die('MySQL connect ERROR : ' . mysql_error()); } // #2 DB접속 $ret = mysql_select_db( 'bbs', $db); if( !$ret ){ die('MySQL select ERROR : '. mysql_error()); } ?> <!-- 게시판 HTML소스코드 !--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>index</title> <link href="bootstrap-3.3.2-dist/css/bootstrap.min.css" rel="stylesheet"> <link href="index.css" rel="stylesheet"> </head> <body> <nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">게시판</a> <?php if( !isset($_SESSION[is_login]) ){ // 세션값이 없을 때 = "로그인 전 상태" ?> </div> <div id="navbar" class="navbar-collapse collapse"> <!-- method=POST , action=signin.php POST방식으로 signin.php로 입력받은 데이터를 전송하는 form태그 !--> <form class="navbar-form navbar-right" method=POST action=signin.php> <div class="form-group"> <input type="text" name="user_id" placeholder="USER ID" class="form-control"> </div> <div class="form-group"> <input type="password" name="user_pw" placeholder="Password" class="form-control"> </div> <button type="submit" class="btn btn-success">Sign in</button> </form> </div><!--/.navbar-collapse --> </div> <?php }else{ // 세션값이 존재 = "로그인 된 상태" => 아이디 비밀번호 입력 폼 화면에 출력x echo " Welcome~ "; } ?> </nav> <!-- 게시글들을 모아놓는 테이블 --> <div class="jumbotron"> <div class="container"> <div class="table-responsive"> <table class="table table-bordered table-striped"> <thead> <tr> <th> 번호 </th> <th> 게시글 제목 </th> <th> 작성자 </th> <th> 작성시간</th> </tr> </thead> <tbody> <tr> <th>1</th> <td>제목</td> <td>작성자</td> <td>작성시간</td> </tr> <tr> <th>2</th> <td>제목</td> <td>작성자</td> <td>작성시간</td> </tr> <tr> <th>3</th> <td>제목</td> <td>작성자</td> <td>작성시간</td> </tr> </tbody> </table> </div> </div> </div> <hr> <footer> <p>© Company 2014</p> </footer> </body> </html> | cs |
[ http://192.168.6.123/signin.php 소스코드 ]
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <?php // #1 MySQL 접속 $db = mysql_connect( localhost , 'root' , 'password1!' ); if( !$db ){ die('MySQL connect ERROR : ' . mysql_error()); } // #2 DB 접속 $ret = mysql_select_db( 'bbs', $db); if (!$ret) { die('MySQL select ERROR : '. mysql_error()); } // 세션 사용 선언 session_start(); // index.php의 로그인폼에서 보내온 정보를 변수에 저장한다 // user_id 와 user_pw를 POST로 전달받는다 $id = $_POST[user_id]; $pw = $_POST[user_pw]; // user테이블에서 입력받은 아이디와 비밀번호가 일치하는 데이터 검색 $sql = "SELECT * FROM user WHERE user_id = '{$id}' and user_pw = md5('{$pw}')"; $resource = mysql_query( $sql ); $num = mysql_num_rows( $resource ); $asoc= mysql_fetch_asoc($resource); # 참고 내용 참조 // -> $asoc : Array=( [no]=>사용자 식별번호, [user_id]=>아이디, [user_pw]=>비밀번호, [email]=>이메일 ) if( $num > 0 ){ // 아이디와 패스워드가 일치하는 데이터가 검색된 경우. // session 테이블에서 입력받은 아이디와 일치한 데이터가 있는지 검색한다 // session 테이블 = 접속해있는 계정을 저장하는 테이블 $sql = "SELECT * FROM session WHERE user_id = '{$id}'"; $resource = mysql_query( $sql ); $num = mysql_num_rows( $resource ); if ( $num > 0 ){ // session 테이블에 데이터가 존재 = 이미 로그인된 사용자 echo "<script> alert('이미 로그인 한 사용자입니다 ');</script>"; }else{ // 로그인을 아직 안한 사용자, 이제 로그인 됫다! // # session 테이블에 사용자 정보를 입력(INSERT) $sess_id = session_id(); // session_id() : 세션번호 반환 $sql = "INSERT INTO session VALUE( $row[no], '$id','$sess_id')"; // 사용자 식별번호, 아이디, 세션아이디 값을 세션테이블에 저장시킨다 // 다음 로그인 시 해당 테이블에 데이터 존재유무를 통해 로그인중인지 아닌지 판단한다 $ret = mysql_query( $sql ); // # 세션변수에 데이터 추가 $_SESSION[user_id] = $id; $_SESSION[is_login] = 1; // # 로그인 환영 메시지 출력 echo "<script> alert('로그인 되었습니다');</script>"; } }else{ // user테이블에 입력받은 아이디와 패스워드가 일치하는 데이터가 없다. echo "<script> alert('아이디 또는 패스워드가 올바르지 않습니다 ');</script>"; } ?> <meta http-equiv='refresh'content="0;url='http://192.168.6.123/index.php'"> | cs |
로그인할 아이디와 패스워드를 전송받는 페이지 ( 올바른 아이디와 비밀번호인지 확인한다 )
#참고 내용
* 테이블에서 가져온 행을 배열로 반환하기
data: no:사용자번호, user_id:아이디, user_pw:비밀번호, email:이메일 각 열에 대한 데이터들이 저장되어있다
1> mysql_fetch_row(data);
2> mysql_fetch_asoc(data);
기존의 key값이 인덱스가 되며 순서대로 데이터가 저장되어 배열로 반환된다
3> mysql_fetch_array
[ 실행화면 ]
[ 게시판 첫 페이지 ]
[ 로그인 성공 화면 ]
[ 로그인 완료 후 ]
로그인 성공 => 세션값 생성 => 로그인 입력 폼 창 화면출력 x
'WebHacking > Web' 카테고리의 다른 글
PHP와 MySQL을 활용한 게시판 만들기[4] - 게시글목록 (0) | 2017.08.25 |
---|---|
PHP와 MySQL을 활용한 게시판 만들기[3] - 로그아웃, 게시글작성 (0) | 2017.08.24 |
PHP와 MySQL을 활용한 게시판 만들기[1] - 회원가입 (1) | 2017.08.22 |
MySQL설치 및 DB생성 / Table 생성 (0) | 2017.08.21 |
PHP Cookie / Session 생성 및 초기화 (0) | 2017.08.18 |