웹_프론트_백엔드/프론트엔드

2021.01.23

shine94 2021. 1. 23. 14:07

1. 세션(Session)

 : 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자의 정보를 저장하는 방법을 의미한다.
   사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지 세션이라고 한다.
   세션은 서비스가 돌아가는 서버 측에 데이터를 저장하고, 세션의 키값만을 클라이언트 측으로 남겨둔다.
   브라우저는 필요할 때마다 이 키값을 이용하여 서버에 저장된 데이터를 사용하게 된다.

** 웹은 특성상 한 번 접속해서 페이지를 받게 되면 연결을 끊는다.

 

** 요청한 사용자가 서버에 붙어있는 상태가 아니기 때문에 서버는 요청한 사용자가 존재하는지 알 방법이 없다.
   이에 대한 해결책으로 time, 유효시간이 주어져서 이 시간동안 다른 페이지를 요청하는지의 여부로 판단한다.

 

** 유효시간 내에 사용자가 다시 페이지를 요청하게 되면...!
   웹서버의 Session id의 유효시간이 초기화되면서 세션아이디는 아직도 유효하다는 것을 인지하게 된다.

 

** 유효시간이 초과하여 다시 접속하게 되면 다시 Session id가 발급되고 이런 경우는 새로 접속한 것과 같다.
   즉, Session id를 다시 발급해주는 순간을 서로 초면인 상태로 이해하면 쉽다.

 

 

2. 세션이 유지되는 시간

   ① 웹서버에서 지정된 시간 안에 사이트의 페이지를 다시 엑세스 하는 경우

   ② 서버에서 해당 세션이 사라지지 않는 시간동안 유지

 


3. 세션이 끊어지는 경우

   ① 웹서버에서 지정된 시간 안에 사이트의 페이지를 엑세스하지 않는 경우

   ② 브라우저를 닫았다 여는 경우(쿠키가 사라지기 때문)

   ③ 쿠키정보를 삭제하는 경우

 

 

4. 세션 시간 설정 및 지속시간 우선순위

   ① 페이지 설정(php 코드로 세션시간을 설정)

   ② php.ini 설정(session.gc_maxlifetime = 1440) → 기본설정 24분

   ③ 웹서버 설정

 

 

5. php에서 세션을 사용하기 위한 코드

   : session_start();

 

* php에서는 세션을 사용하기 위해 페이지 최상단에 session_start()를 꼭 명시해야 한다.

 

 

6. php에서 세션변수를 만드는 방법
 : $_SESSION["키"] = 값;

 

** 1_session1.php

<?php
    session_start();
    $_SESSION['id'] = "admin";
    $_SESSION['name'] = "관리자";
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>세션 - 1</title>
</head>
<body>
    <h2>세션 - 1</h2>
    <p>세션 id : <?=session_id()?></p>
    <p>세션 id 변수의 값 : <?=$_SESSION['id']?></p>
    <p>세션 name 변수의 값 : <?=$_SESSION['name']?></p>
</body>
</html>

 

 

** 2_session2.php

<?php
    session_start();
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>세션 - 2</title>
</head>
<body>
    <h2>세션 - 2</h2>
    <p>세션 id : <?=session_id()?></p>
    <p>세션 id 변수의 값 : <?=$_SESSION['id']?></p>
    <p>세션 name 변수의 값 : <?=$_SESSION['name']?></p>
</body>
</html>

 

 

 

7. 세션변수 삭제하기

 : session_unset()을 호출

 

 

8. 3_login.php, 3_login_ok.php, 3_logout.php

** 3_login.php

<?php
    session_start();
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>세션을 이용한 로그인</title>
</head>
<body>
    <h2>세션을 이용한 로그인</h2>
<?php
    if(!isset($_SESSION['id'])) {
?>
    <form method="post" action="3_login_ok.php">
        <p><label>아이디 : <input type="text" name="userid"></label></p>
        <p><label>비밀번호 : <input type="password" name="userpw"></label></p>
        <p><input type="submit" value="로그인"></p>
    </form>
<?php
    } else {
?>
    <p><?=$_SESSION['id']?>님 환영합니다.</p>
    <p><a href="3_logout.php">로그아웃</a></p>
<?php
    }
?>
</body>
</html>

 

** 3_login_ok.php

<?php
    session_start();

    $userid = $_POST['userid'];
    $userpw = $_POST['userpw'];

    if($userid == "admin" && $userpw == "1234") {
        $_SESSION['id'] = $userid;
        echo "<script>alert('로그인이 되었습니다.');location.href='3_login.php';</script>";
    } else {
        echo "<script>alert('아이디 또는 비밀번호를 확인하세요.');history.back();</script>";
    }
?>

 

** 3_logout.php

<?php
    session_start();
    session_unset();
?>
<script>
    alert('로그아웃이 되었습니다.');
    location.href = "3_login.php";
</script>

 

 

9. PHP 파일

1) readfile()

 : 파일에서 데이터를 한 줄 읽어오는 함수이다.
   echo 함수가 필요 없으며, 텍스트를 표시할 위치에 사용하면 읽어온 내용을 그대로 출력한다.

 

** 4_file1.php

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>파일 - 1</title>
</head>
<body>
    <h2>파일 - 1</h2>
    <p><?php readfile('data.txt'); ?><p>
</body>
</html>

 


2) file()

 : 매개변수에 지정된 파일을 읽어들여 한줄씩 배열에 저장한다.

 

** 파일 로드시 실패할 가능성이 있는경우

   (@ 기호 붙이면 실행시 에러가 나더라도 스크립트를 중단하지 않으며, 화면에 에러를 발생하지 않음)
   $변수 = @file(파일경로) or 실패했을 경우 처리할 문장;

 

** 5_file2.php

<?php
    $result = "";
    $lines = @file("data.txt") or $result = "파일을 읽을 수 없습니다.";
/*
    $lines[0] = "안녕하세요. 여러분";
    $lines[1] = "php 파일 테스트 예제입니다.";
    $lines[2] = "날씨가 많이 풀렸습니다.";
    $lines[3] = "아직도 코로나가 심각한데";
    $lines[4] = "코로나 조심하세요!";
*/
    if($lines != null) {
        for($i=0; $i<count($lines); $i++) {
            $result .= ($i + 1)." : ".$lines[$i]."<br>";
        }
    } 
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>파일 - 2</title>
</head>
<body>
    <h2>파일 - 2</h2>
    <p><?=$result?></p>
</body>
</html>

 

 

** 6_file3_me.php

<?php
    $result = "";
    $lines = @file("tel.txt") or $result = "파일을 읽을 수 없습니다.";
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>연락처</title>
    <style>
        table { 
            border-collapse: collapse;
            border: 1px solid red;
        }
        td, th {
            text-align: center;
            width: 300px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
<h2>연락처</h2>
<table>
    <tr><th>번호</th><th>이름</th><th>주소</th><th>번호</th></tr>
    <?php
        $i = 1;
        while($i<count($lines)) {
    ?>
    <tr>
        <td><?=$i?></td>
    <?php 
        $arr = explode(",", $lines[$i]); 
        foreach($arr as $word) {
    ?>
        <td><?=$word?></td>
    <?php }?>
    </tr>
    <?php
            $i++;
        }
    ?>
</table>
</body>
</html>

 

 

** 6_file3_teacher.php

<?php
    $result = "";
    $lines = @file("tel.txt") or $result = "파일을 읽을 수 없습니다.";
    /*
        $lines[0] = "김사과,서울 서초구,010-1111-1111";
        $lines[1] = "오랜지,서울 강남구,010-2222-2222";
        $lines[2] = "이메론,서울 동작구,010-3333-3333";
        $lines[3] = "반하나,경기 고양시,010-4444-4444";
        $lines[4] = "박수박,경기 고양시,010-5555-5555";

        <tr>
            <td>1</td>
            <td>김사과</td>
            <td>서울 서초구</td>
            <td>010-1111-1111</td>
        </tr>
    */
    if($lines != null) {
        for($i=0; $i<count($lines); $i++) {
            $result .= "<tr>";
            $arr = explode(",", $lines[$i]);
            // $arr[0] = "김사과";
            // $arr[1] = "서울 서초구";
            // $arr[2] = "010-1111-1111";
            $result .= "<td>".($i + 1)."</td>";
            for($j=0; $j<count($arr); $j++) {
                $result .= "<td>{$arr[$j]}</td>";
            }
            $result .= "</tr>";
        }
    }
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>연락처</title>
    <style>
        table { width: 600px; border-collapse: collapse;}
        th, td { height: 30px; border: 1px solid red; }
    </style>
</head>
<body>
    <h2>연락처</h2>
    <table>
        <tr>
            <th>번호</th>
            <th>이름</th>
            <th>주소</th>
            <th>연락처</th>
        </tr>
        <?=$result?>
    </table>
</body>
</html>

 

 

3) fopen()

 : file() 함수보다 유연한 코드를 작성하기 위한 함수로, 모드를 설정하여 여러가지 파일에 대한 처리를 할 수 있다.

 

4) fgets()

 : fopen() 함수로 읽은 파일의 데이터를 읽어온다.

 

** 7_file4.php

<?php
    $fs="";
    $fs = @fopen("tel.txt", "r") or exit("BREAK");
    $result = "";
    while(!feof($fs)) {             // feof() : 파일의 끝을 확인하는 함수
        $result .= fgets($fs, 10);  // 10 byte씩 읽어옴, 2번째 매개변수를 적지 않으면 1줄씩 읽어온다.
    }
    fclose($fs);
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>파일 - 4</title>
</head>
<body>
    <h2>파일 - 4</h2>
    <p><?=$result?></p>
</body>
</html>

 


5) fputs()

 : fopen() 함수로 읽은 파일의 데이터를 저장한다.

 

** 8_file5.php

<?php
    // 데이터 추가
    if($_POST != null) {
        //echo($_POST['msg']);
        $fs = @fopen("reply.txt", "a") or exit("BREAK");
        if($fs != null) {
            $msg = $_POST['msg'];
            fputs($fs, $msg."\n");
            fclose($fs);
        }
    }

    // 데이터 읽기
    $result = "";
    $fs = @fopen("reply.txt", "r") or exit("BREAK");
    $i = 1;
    while(!feof($fs)) {
        $msg = htmlspecialchars(fgets($fs));
        if($msg != null) {
            $result = $i++." : ".$msg."<br>".$result;
        }
    }
    fclose($fs);
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>파일을 이용한 댓글 달기</title>
</head>
<body>
    <h2>파일을 이용한 댓글 달기</h2>
    <form method="post" action="./8_file5.php">
        <p><label>댓글 : <input type="text" name="msg"></label></p>
        <p><input type="submit" value="댓글달기"></p>
    </form>
    <hr>
    <p><?=$result?></p>
</body>
</html>

 

 

 

10. 전세계 DBMS 순위 > 해당 수업에서는 MySQL으로 공부할 예정!

   https://db-engines.com/en/ranking

 

 

11. MySQL 다운

 : 구글에 검색하여 다운로드 사이트로 이동하기(MySQL 다운 사이트로 바로가기)

> MYSQL Community Server 클릭 > MySQL Installer MSI의 Go to Download Page 클릭

> Windows(x86, 32-bit), MSI Installer 8.0.23 422.4M의 Download 클릭 > No thanks, just start my download 클릭

> installer 실행파일 다운 완...!

> MySQL installer

> 다운 완...!

> MySQL 설치 후 로그인도 완...!

'웹_프론트_백엔드 > 프론트엔드' 카테고리의 다른 글

2021.01.30  (0) 2021.01.30
2021.01.24  (0) 2021.01.27
2021.01.17  (0) 2021.01.17
2021.01.16  (0) 2021.01.16
2021.01.10  (0) 2021.01.11