본문 바로가기
Program/오래된 PHP 게시판2

[PHP]PHP세션을 이용해 토큰을 만들어보자 (PHP 토큰제작)

by 한빛가람 2013. 9. 16.
반응형





로그인이라던지, 회원가입이라던지 토큰이 필요한 부분이 매우 많습니다.


여기서 할 토큰은 시간제한 토큰입니다.


시간제한 토큰이 뭐냐면


시간이 지나면 토큰값이 만료되서 토큰을 새로 발급받는걸 생각하시면되요. 그런데, 세션을 삭제하면 로그인이나 가입이 안되게 꼼수를 써야합니다.


먼저 페이지 제작을해줍시다..!


페이지 이름은 정해진대로해주세요.


다음 페이지 이름은 login.php로 칭합니다.


외부 접근을 차단하기 위해 여러가지 세션을 추가합니다.


<?SESSION_START():?>
<?php
$_SESSION[token]=date("YmdHis"); //은근슬쩍 토큰생성 (아무에게도 안보여요. 단지 PHPSSID가 보일 뿐이지)
$_SESSION[tokensave]=$_SESSION[token]; //토큰을 다른 세션에 저장
$rand_token=mt_rand(1,9999);
$_SESSION[fake]=$rand_token;//봇 테러 방지를 위한 꼼수
$faketoken=$_SESSION[tokensave]-$_SESSION[fake];
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>로그인 페이지</title>
    </head>
    <body>
        <form action='login_ok.php' method='post'>
            아이디 : <input type='text' name='id'><br>
            비밀번호 : <input type='password' name='pw'> <br>
            <input type='hidden' name='l_token' value='<?php echo $_SESSION[fake]; ?>'>
            <input type='submit' value='로그인'>
            </form>
    </body>
</html>

login.php





다음 페이지 이름은 login_ok.php로 정합니다.


<?SESSION_START();?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>로그인 중..</title>
    </head>
    <body>
        <?php
            $second="300"; //시간초 지정 60 = 1분 저는 넉넉히 5분으로 하겠습니다.
            $time=date("YmdHis") -$_SESSION[tokensave];
            if(!$_SESSION[token] or !$_SESSION[tokensave] or !$_SESSION[fake] or $_POST[l_token]){echo "토큰이 유효하지 않습니다."; exit;}
            if($_SESSION[tokensave]-$_SESSION[fake]==$_POST[l_token]){}else {echo "토큰이 유효하지 않습니다."; exit;}
            if($time<$second){
           
            //세션 인증 작업이 성공될때 로그인 커멘드를 집어넣으세요.
           
            }
           
            else {echo "토큰이 유효하지 않습니다."; exit;}

        ?>
    </body>
</html>



login_ok.php



세션이 허용되는 서버에서는 다 동작합니다만, 필자가 테스트를 안해서 에러뜨는부분이 있을듯 합니다. 자세한 문의는 댓글에해주세요.


아래의 손가락버튼을 눌러주시면 블로그에 매우 큰 도움이됩니다. 히히




Copyright © 이동마이의 컴퓨터 하루 All Rights Reserved.



반응형
크리에이티브 커먼즈 라이선스
한빛가람 필자가 게시한 대부분의 블로그 게시물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다. 게시물에 CCL이 적용되지 아니하다고 적혀있는 경우엔 본 라이선스 적용 대상이 아닙니다.

댓글