PHP
를 이용한 게시판을 만들고있다. 조회수를 증가시킬 때, 일정 시간 이내에 다시 글을 읽게 되면 조회수가 증가하지 않게 구현하려 했다. 그래서, 보안상 중요하지 않은 쿠키를 사용하여 해당 기능을 구현하려 한다.
쿠키에 대한 내용은 이전에 포스트 했으니 참고 바람.
[WEB] Cookie & Session
Cookie
를 사용한 이유내가 제작하고있는 게시판에서는 조회수가 그다지 중요한 자료가 아니라서 쿠키를 이용하여 조회수 증가를 구현하려 했다.
쿠키는 Client side
에 저장하므로 서버의 자원을 절약하면서 쿠키의 수명을 직접 설정할 수 있어 일정 시간이 지나면 조회수가 다시 증가하도록 쉽게 구현할 수 있었다.
쿠키는 개발자 도구(F12)에서 Application
-> Cookies
에서 확인이 가능하다.
Code
위 이미지에 나와있는 것처럼 board_(글번호)
이름의 쿠키를 만들었다.
쿠키가 존재한다면 조회수를 증가시키지 않는다. 쿠키가 없다면 24시간동안 존재하는 쿠키를 생성하고 조회수를 증가시킨다.
쿠키 생성은 setcookie()
함수로 사용이 가능하다.
쿠키의 수명은 초단위이므로 현재 시간 time()
에서 설정할 시간 만큼을 초단위로 입력하면 된다.
나는 24시간을 수명으로 설정하고 싶어서 60 * 60 * 24
를 더해주었다.
// 쿠키가 없는 경우 생성 후 조회수 증가
$is_count = false;
if (!isset($_COOKIE["board_{$board_id}"])) {
setcookie("board_{$board_id}", $board_id, time() + 60 * 60 * 24);
$is_count = true;
}
if ($is_count) {
$sql = "
UPDATE board SET
view_count = view_count + 1
WHERE board_id = :id
";
$result = DB::query($sql, array(
':id' => $board_id
));
if ($result == 0) { // UPDATE는 변경된 row의 개수 반환
exit(header('Location: /index.php?msg=Wrong_board_ID'));
}
}