[WEB] Cookie & 조회수

Profile-exe·2021년 8월 19일
0

web

목록 보기
6/11
post-thumbnail

PHP를 이용한 게시판을 만들고있다. 조회수를 증가시킬 때, 일정 시간 이내에 다시 글을 읽게 되면 조회수가 증가하지 않게 구현하려 했다. 그래서, 보안상 중요하지 않은 쿠키를 사용하여 해당 기능을 구현하려 한다.

쿠키에 대한 내용은 이전에 포스트 했으니 참고 바람.
[WEB] Cookie & Session


조회수에 Cookie를 사용한 이유

내가 제작하고있는 게시판에서는 조회수가 그다지 중요한 자료가 아니라서 쿠키를 이용하여 조회수 증가를 구현하려 했다.

쿠키는 Client side에 저장하므로 서버의 자원을 절약하면서 쿠키의 수명을 직접 설정할 수 있어 일정 시간이 지나면 조회수가 다시 증가하도록 쉽게 구현할 수 있었다.

쿠키는 개발자 도구(F12)에서 Application -> Cookies에서 확인이 가능하다.


Code

위 이미지에 나와있는 것처럼 board_(글번호)이름의 쿠키를 만들었다.

쿠키가 존재한다면 조회수를 증가시키지 않는다. 쿠키가 없다면 24시간동안 존재하는 쿠키를 생성하고 조회수를 증가시킨다.

쿠키 생성은 setcookie() 함수로 사용이 가능하다.

setcookie - PHP Documentation

쿠키의 수명은 초단위이므로 현재 시간 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'));
    }
}

게시판 프로젝트 URL

Github - Profile-exe/CRUDboardsite

profile
컴퓨터공학과 학부생

0개의 댓글