쿠키, 세션
쿠키와 세션을 사용하는 이유 ?
=> 서버와 클라이언트가 누구인지 인증을 계속해야한다. 즉 쿠키와 세션은 클라이언트의 인증을 유지하기 위해 사용
EX) 쿠키와 세션을 사용하지 않으면 쇼핑몰에서 옷을 구매하려고 최초 로그인을 했음에도, 페이지를 이동할때 마다 계속 로그인을 해야한다 -> 서버는 클라이언트가 누군지 기억하지 않음.
1) 쿠키
클라이언트 측(브라우저)에서 관리하는 작은 기록 정보 파일
EX) 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하겠습니까?" 또한 쇼핑몰의 장바구니 기능
2) 세션
쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리
ex) 로그인과 같이 보안상 중요한 작업을 수행할 때 사용
3) 쿠키와 세션의 차이
- 쿠키와 세션은 비슷한 역할을 하며, 동작원리도 비슷하다.(세션도 쿠키를 사용) 그러나 큰 차이점은 사용자의 기록 정보가 저장되는 위치이다.
- 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용한다.
- 보안 면에서 세션이 더 우수하며 요청 속도는 쿠키가 세션보다 빠름.
PHP 게시판을 만들 때의 주의점
문제점 :
1. 수정하는 부분(doModify.php)에서 자꾸 막힘
1) sql 을 자꾸 틀림 조심할 것
2) 수정을 하고 alert()란 함수를 만들어서 ~번 게시물이 수정되었다는 문구가 뜨는데 이 때 번호에 맞게 게시물이 떠야한 다. 하지만 0번 게시물이 뜬다는 오류가 남.
(얼른 넘어가야하는데 1시간째 코드만 바꾸면서 문제점 찾는 중)
<?php
$dbConn = mysqli_connect("127.0.0.1", "sbsst", "sbs123414", "php_blog_2021") or die("DB CONNECTION ERROR");
if ( isset($_GET['title']) == false) {
echo "title을 입력해주세요.";
exit;
}
if ( isset($_GET['body']) == false) {
echo "body을 입력해주세요.";
exit;
}
$title = $_GET['title'];
$body = $_GET['body'];
$sql = "
upDate article
SET updateDate = NOW(),
title = '${title}',
`body` = '${body}'
where id = '${id}'
";
$rs = mysqli_query($dbConn, $sql);
?>
?>
<script>
alert('<?=$id?>번 게시물이 수정되었습니다.');
location.replace('detail.php?id=<?=$id?>');
</script>
해결 :
모든 id를 가져오지 않았기 때문에 문제가 생김
$id = $_GET['id'];
를 추가할 것
'doModify.php'
<?php
$dbConn = mysqli_connect("127.0.0.1", "sbsst", "sbs123414", "php_blog_2021") or die("DB CONNECTION ERROR");
if ( isset($_GET['title']) == false) {
echo "title을 입력해주세요.";
exit;
}
if ( isset($_GET['body']) == false) {
echo "body을 입력해주세요.";
exit;
}
$id = $_GET['id'];
$title = $_GET['title'];
$body = $_GET['body'];
$sql = "
upDate article
SET updateDate = NOW(),
title = '${title}',
`body` = '${body}'
where id = '${id}'
";
$rs = mysqli_query($dbConn, $sql);
?>
?>
<script>
alert('<?=$id?>번 게시물이 수정되었습니다.');
location.replace('detail.php?id=<?=$id?>');
</script>
2. 삭제(doDelete.php)
문제점 :
1) 번호에 맞는 게시판이 삭제되었다는 문구가 뜨고 리스트로 돌아가지만 그 당시 게시물은 삭제되지 않음
<?php
$dbConn = mysqli_connect("127.0.0.1", "sbsst", "sbs123414", "php_blog_2021") or die("DB CONNECTION ERROR");
$id = $_GET['id'];
$sql = "
DELETE FROM article AS A WHERE A.id = '${id}'
";
?>
<script>
alert('<?=$id?>번 게시물이 삭제되었습니다.');
location.replace('list.php');
</script>
sql코드에 실수했나 싶어서 MYSQL에 했지만 MYSQL에는 문제가 없음을 확인
사진을 보면 id = 1 인 정보가 사라진 것을 확인할 수 있다.

해결 :
mysqli_query()란 함수를 사용하지 않았기 때문에
mysqli_query() 함수란 mysqli_connect를 통해 연결된 객체를 이용하여 MYSQL쿼리를 실행시키는 함수
mysqli_query($dbConn, $sql);
를 추가할 것
'deDelete.php'
<?php
$dbConn = mysqli_connect("127.0.0.1", "sbsst", "sbs123414", "php_blog_2021") or die("DB CONNECTION ERROR");
$id = $_GET['id'];
$sql = "
DELETE FROM article WHERE id = '${id}'
";
mysqli_query($dbConn, $sql);
?>
<script>
alert('<?=$id?>번 게시물이 삭제되었습니다.');
location.replace('list.php');
</script>
webInit.php
문제점 :
<?php
$dbConn = mysqli_connect("127.0.0.1", "sbsst", "sbs123414", "php_blog_2021") or die("DB CONNECTION ERROR");
webInit.php를 사용할려 하는데 오류가 뜬다.
require_once $_SERVER['DOCUMENT_ROOT'] . '/webInit.php';
$sql = "
SELECT * FROM article AS A ORDER BY A.id DESC
";
$rs = mysqli_query($dbConn, $sql);
$articles = [];
while ( $article = mysqli_fetch_assoc($rs) ) {
$articles[] = $article;
}
?>
위의 코드는 webInit.php 를 사용한 list.php의 윗부분인데 뭐가 이상한지 오류가 자꾸 뜬다.
해결 :
<?php ?> 는 태그를 할 때 꼭 같이 있어야하는, 하나만 있으면 안되는 기본적인 코드이다.
중간에 있을 때 다음 코드와 헷갈리지 않도록 <?php ?>를 필수적으로 적어줘야하지만 마지막 코드에 없을 경우 ?>는 생략 가능하다.
즉 다시 말해 webInit.php 마지막 줄에는 ?>가 생략되어 있다.
원래의 weblinit.php
<?php
$dbConn = mysqli_connect("127.0.0.1", "sbsst", "sbs123414", "php_blog_2021") or die("DB CONNECTION ERROR");
?>
그러므로 list.php 에서도 문법에 맞게
첫 줄에 <?php 를 추가해야한다.
'공부기록' 카테고리의 다른 글
| 2021-05-30 (0) | 2021.06.01 |
|---|---|
| 2021-05-27 (0) | 2021.06.01 |
| 2021-05-25 (0) | 2021.05.26 |
| 2021-05-17 (0) | 2021.05.18 |
| 2021-05-10 (0) | 2021.05.11 |