세션을 이용한 로그인 로그아웃(php)
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)
'프로그래밍 > PHP' 카테고리의 다른 글
[php] 문자열 자르기 (0) | 2015.01.27 |
---|---|
echo "" 구문 안의 스타일시트가 적용이 되지 않을때 (0) | 2015.01.27 |
[php 또는 javascript] 달력 소스 (0) | 2015.01.27 |
php 페이지 내용중 일부만 캐릭터셋 변경하기 (0) | 2015.01.27 |
[php] 숫자 세자리 수마다 콤마(,) 찍어주기 (0) | 2015.01.27 |