세션을 이용한 로그인 로그아웃(php)

프로그래밍/PHP|2015. 1. 27. 11:36
반응형

CREATE TABLE sess_test ( no int(4) unsigned NOT NULL auto_increment, sess_id char(10) NOT NULL default '', sess_passwd char(25) NOT NULL default '', level int(1) NOT NULL default '0', PRIMARY KEY (no) ) TYPE=MyISAM; 

먼저 위의 스키마처럼 테이블을 생성합니다. 
sess_id 는 유저 아이디가 저장될 필드 이름입니다. 
sess_passwd 는 유저 패스워드가 저장될 필드 이름입니다. 
level 은 회원들의 레벨,즉 관리자와 일반회원을 구분하기 위한 필드 입니다. 
편의상(제 임의대로) level 9가 관리자, level 1 이 일반회원으로 구분 하기 위합입니다. 
지금 강좌에선 단순히 로그인 로그아웃 처리만... 하겠습니다. 
관리자 비회원 구분도... 디비에서 불러온 level 의 판단으로 이루어지므로 그리 어렵지 않습니다.




connect.php 의 구성 

아래처럼 connect.php 를 구성합니다. 디비와 연결 하는 부분이므로... 디비와 연동되는 페이지는 incldue 하여 사용합니다. 

<? $localhost="localhost"; $user_id="root"; //디비 접근 아이디 
$user_passwd=""; //디비 접근 패스워드 
$db_name=""; //접근할 디비 이름 //mysql 에 접속하기 위한 구문... 이 파일을 테이블에 접근할 페이지에 include 하여 사용한다. 
$connect=mysql_connect("$localhost","$user_id","$user_passwd") or die("SQL server에 연결할수 없습니다."); mysql_select_db("$db_name",$connect); ?>




sess_func.php 의 구성 페이지 이동함수 메세지 출력 함수를 정의 한 파일입니다. 

<? //페이지 이동 함수 

function GoGo($url) { 
global $connect; echo"<meta http-equiv="refresh" content="0; url=$url">"; 
if($connect) @mysql_close($connect); exit; 
} //메세지 보여주는 함수 메세지창 //메세지를 보여주고 뒤로 백한다 

function message($msg) {
echo(" <html><head> <script name=javascript> window.alert('$msg'); history.go(-1); </script> </head></html> "); 
exit; 
} //메세지를 보여주고 가고자할 페이지로 이동한다... 

function GoTo($msg="",$url) { 
global $connect; 
echo(" <html><head> <script name=javascript> window.alert('$msg'); </script> </head></html> "); 
echo"<meta http-equiv="refresh" content="0; url=$url">"; if($connect) @mysql_close($connect); exit; 
} ?>





회원가입폼

session_member.php 
<? 
session_cache_limiter(''); 
session_start(); 
include "connect.php"; //디비에 접근하기위해 정의한 페이지를 include 시킨다.... 
include"sess_func.php"; // 함수를 정의한 페이지를 include 시킨다... 
//테이블을 생성한다음 
//session_cache_limiter('') 와 session_start(); 를 위와 같이 선언해 줍니다. 
//session_start 는 세션을 사용하겠다고 선언해주는 것입니다. 
//session_cache_limiter('') 를 해주는건 만료된 페이지입니다... 를 보여주지 않게 해주기 위함입니다. 
//저는 mode 라는 변수를 써서 한페이지에 값(아이디와 패스워드)를 입력받는 처리와 
//값이 테이블에 저장되는 코드를 구분하였습니다. 
//만약 mode 라는 변수에 값이 없다면... 즉, 처음 이 페이지를 호출하게 되면 mode 라는 변수에 값이 
//들어 있지 않게 되므로 .... 입력받는 폼만 보여주게 됩니다. 
//$PHP_SELF 는 자기자신(현재페이지를)을 나타내는 php 변수 입니다. 
//$PHP_SELF 를 쓰면 Submit 을 클릭했을시 자기자신 즉 session_member.php 를 호출 하게 되겠죠... 
//그리고 input type=hidden 으로 변수 이름은 mode 값은 ok 를 주었으므로 
//submit 을 클릭하면 $mode 변수에 ok라는 값이 들어가서 session_member.php 를 호출하게 됩니다. 

if(!$mode) { 
echo(" <form name=sign method=post action=$PHP_SELF> <input type=hidden name=mode value=ok> <table border=1 cellpadding=0 cellspacing=0> <tr> <td>ID</td> <td><input type=text name=id size=12 maxlength=10></td> </tr> <tr> <td>Passwd</td> <td><input type=password name=passwd size=12 maxlength=10></td> </tr> <tr> <td colspan=2 align=center><input type=submit value=Submit></td> </tr> </table> </form> "); 
} //위에서 정의한 폼의 값이 넘어오게 됩니다. 
//위의 폼에서 input type=hidden 으로 mode 란 변수를 선언하고 값은 ok 를 주었으므로 
//이리로 값이 넘어 오게 되겠죠^^ 
if($mode==ok) { //공백.. 값을 입력시키지 않으면 메세지를 뿌린다. 
if(!ereg("([^[:space:]])",$id)) message("id를 입력하세요"); 
if(!ereg("([^[:space:]])",$passwd)) message("password 를 입력하세요"); //sql 에 접근해서 입력한 아이디와 같은 아이디가 있는지 찾는다. 
$sql=mysql_query("select * from sess_test where sess_id='$id'") or die(mysql_error()); 
$check=mysql_num_rows($sql); //만약 check 변수에 값이 있으면 똑같은 아이디가 있는것이 되겠죠? 
//그럼 메세지창을 뿌립니다. 
if($check) message("같은 아이디가 있습니다. 다른아이디로 해주세요!!"); //그렇지 않다면... 즉 같은 아이디가 없다면 값을 입력합니다. 
//입력시 관리자가 아니므로 레벨은 1 로 입력 합니다.... 
else { 
$sql=mysql_query("insert into sess_test values('','$id','$passwd',1)") or die(mysql_error()); 
GoTo("가입하셨습니다","session_start.php"); } 
}




회원체크

session_start.php 
<? 
session_cache_limiter(''); 
session_start(); //테이블을 생성한다음 
//session_cache_limiter('') 와 session_start(); 를 위와 같이 선언해 줍니다. 
//session_cache_limiter('') 를 해주는건 만료된 페이지입니다... 를 보여주지 않게 해주기 위함입니다. 
//현재 세션레지스터 안에 값이 없어서 로그인 하지 않은 상태라면 
//폼네임은 login 이고 
//text Box 에서 입력 받은 값은 id,passwd 변수로 sess_login.php 페이지 로넘아가게 됩니다. 
if(!$HTTP_SESSION_VARS) { 
echo(" <form name=login method=post action=sess_login.php> <table border=1 cellpadding=0 cellspacing=0> <tr> <td>ID</td> <td><input type=text size=10 name=id maxlength=10></td> </tr> <tr> <td>Passwd</td> <td><input type=text size=10 name=passwd maxlength=10></td> </tr> <tr> <td colspan=2 align=center><input type=submit value=Submit><input type=reset value=Reset></td> </tr> </table> </form> "); 

//세션 레지스터 level 이란 세션 변수 안에 값이 있다면... 값이 무엇이든지 간에 로그인 한 상태라면 
//아래의 상태를 보여줍니다. 
else {
echo(" <table border=1 cellpadding=0 cellspacing=0> <tr> <td>$HTTP_SESSION_VARS[sess_id] 님 로그인...</td> </tr> <tr> <td><a href="sess_logout.php>로그아웃</a></td> </tr> </table> </form> ); 

?>




로그인

sess_login.php 넘어온 값을 세션레지스터에 넣어서 로그인 시킵니다. 
<? 
session_cache_limiter(''); 
session_start(); 
include "connect.php"; //디비 정의 페이지 
include include "sess_func.php"; //함수 정의 페이지 include 
//넘어온 아이디와 패스워드 값으로 sess_test 테이블에 접근하여 해당하는 
//필드를 배열형태로 가져옵니다. 
$sql=mysql_query("select * from sess_test where sess_id='$id' && sess_passwd='$passwd'") or die(mysql_error()); 
$row=mysql_fetch_array($sql); //아이디와 패스워드가 일치하는 사용자가 없으면...(입력된 사용자가 없으면) 메세지를 뿌린다. 
if(!$row) message("그런 사용자는 없습니다."); 
else { //여기 부터 중요 //배열형태로 가져온 필드에 에서 sess_id 필드 즉 id 를 sess_id 란 변수에 넣어주고 
//level 을 $sess_level 변수에다 넣어줍니다. 
//그리고 난후에 세션 에다 그 값을 넣어주는 거죠^^ 
$sess_id=$row[sess_id]; 
$sess_level=$row[level]; 
session_register(sess_id); 
session_register(sess_level); 
GoGo("session_start.php"); } 
?>




로그아웃

세션을 이용한 로그인 로그아웃 마지막 입니다. 
로그아웃 하는 부분입니다. 
제가 로그인 로그아웃 을 구현할때 사용하는 방식을 거의 다 기술 하였습니다... 
처음 세션을 다룰때 정말 삽질 많이 했었읍니다. 
세션의 개념만 잘 이해하고 있으면...쉽게 구현할수 있습니다. 
허접하지만... 잘 봐주시고 엽기적으로 응용 해주세요 회원 수정, 삭제 부분은 넣지 않았습니다. 
태그부분도 잡 태그는 넣지않아 보기 편하도록 노력 하였습니다. 
그럼... 즐 프 하시길^^ 
sess_logout.php 
<? 
session_cache_limiter(''); 
session_start(); 
include"sess_func.php"; //로그아웃 
//아래와 같이 session_unregister 로 세션 레지스터를 날리고 
//session_destroy 로 생성된 세션 을 지워줍니다 
session_unregister(sess_id); 
session_unregister(sess_level); 
session_destroy(); 
GoTo("Logout 하셨습니다.","session_start.php"); 
?> 

출처 : 미니위니

[출처] 플래시 카페 | 색시유져 (http://cafe.naver.com/q69/8058)

반응형

댓글()