이전 게시글은 여기 >>
Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(16) - 게시판 페이징과, 페이징 버튼 중 시작과 끝 버튼 비활성화하기
새로고침을 무한으로 반복하면 무한정으로 조회수가 증가하면 블로그가 아니지 않나? (?)
조회수 증가를 방어하는 방법은 세 가지가 있는데, 쿠키, 세션, ip가 있다.
필자는 쿠키를 이용해 방어해본다.
먼저 조회수 증가를 담당하는 detailAction에서 방어할 것이다.
코드를 보자.
- BoardDetailAction.java
Cookie viewCookie=null;
Cookie[] cookies=request.getCookies();
System.out.println("cookie : "+cookies);
if(cookies !=null) {
for (int i = 0; i < cookies.length; i++) {
//System.out.println("쿠키 이름 : "+cookies[i].getName());
//만들어진 쿠키들을 확인하며, 만약 들어온 적 있다면 생성되었을 쿠키가 있는지 확인
if(cookies[i].getName().equals("|"+id+"|")) {
System.out.println("if문 쿠키 이름 : "+cookies[i].getName());
//찾은 쿠키를 변수에 저장
viewCookie=cookies[i];
}
}
}else {
System.out.println("cookies 확인 로직 : 쿠키가 없습니다.");
}
//만들어진 쿠키가 없음을 확인
if(viewCookie==null) {
System.out.println("viewCookie 확인 로직 : 쿠키 없당");
try {
//이 페이지에 왔다는 증거용(?) 쿠키 생성
Cookie newCookie=new Cookie("|"+id+"|","readCount");
response.addCookie(newCookie);
//쿠키가 없으니 증가 로직 진행
boardRepository.update(id);
} catch (Exception e) {
System.out.println("쿠키 넣을때 오류 나나? : "+e.getMessage());
e.getStackTrace();
}
//만들어진 쿠키가 있으면 증가로직 진행하지 않음
}else {
System.out.println("viewCookie 확인 로직 : 쿠키 있당");
String value=viewCookie.getValue();
System.out.println("viewCookie 확인 로직 : 쿠키 value : "+value);
}
(주석으로 달아두었음)
로직은 다음과 같다.
1. 들어올 때 이 페이지를 들어왔음을 확인하는 쿠키를 만들고 조회수 증가 로직을 진행한다..
2. 다시 재입장을 했을 때 증거용 쿠키가 있는지 확인하고, 증거용 쿠키가 있다면 그 쿠키를 멤버변수에 저장한다.
3. 멤버변수의 쿠키를 확인하고, 멤버 변수 속에 쿠키가 없다면 쿠키를 생성하고 조회수 증가 로직을 진행한다, 멤버 변수 속에 쿠키가 있다면 조회수 증가로직을 진행하지 않는다.
그러니까 먼저 만들어둔 쿠키가 있는지 쿠키들을 돌며 확인한다.
쿠키는 다음과 같이 한두개가 아니기 때문에 배열에 저장되게 되고, 따라서 foreach문을 이용해서 모든 쿠키를 확인하게 된다.
쿠키를 확인하며 쿠키 이름이 규칙과 일치하면 쿠키를 저장하고, 아니면 넘어간다.
이제 저장된 쿠키들을 비교한다. 만약 변수 속에 저장된 쿠키가 없으면 규칙 쿠키를 생성한다.
이 때, 제목을 변수로 두어서 페이지마다 다른 쿠키를 생성해야한다. 그래야 다른 페이지를 가도 같은 로직이 먹지 않게 된다. 제목이 같아버리면 다른 페이지 가도 똑같이 쿠키가 있는걸로 인식되서 조회수가 증가하지 않는다..
진짜 쿠키가 있다면 조회수 증가로직을 실행하지 않고 넘어간다.
'JSP' 카테고리의 다른 글
Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(19) - 파일 업로드를 이용해 프로필 사진 넣기 (0) | 2020.06.12 |
---|---|
Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(18) - 키워드를 이용한 검색 만들기 (0) | 2020.06.12 |
Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(16) - 게시판 페이징과, 페이징 버튼 중 시작과 끝 버튼 비활성화하기 (0) | 2020.06.11 |
Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(15) - 조회수를 증가시키는 부가옵션 만들기 (0) | 2020.06.11 |
Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(14) - 해시 함수를 이용해서 비밀번호 해싱하기 (0) | 2020.06.11 |