IndexController
@SneakyThrows
@GetMapping("/")
public String main(InternCookie cookie, Model model, @PageableDefault(size = 4) Pageable pageable, HttpSession ses, HttpServletRequest request) {
log.error("homeController");
// 쿠키 만료시 Cookie 값이 null이 된다. (유효 시간 동안은 개발자 모드 진입 후(F12) 쿠키 보면 AUTH 라는 이름으로 세션 ID가 들어가 있음)
Cookie danny = WebUtils.getCookie(request, "Danny");
if (!ObjectUtils.isEmpty(danny)) {
if (StringUtils.equalsIgnoreCase(danny.getValue(), request.getSession().getId())) {
String email = (String) request.getSession().getAttribute("email");
if (StringUtils.isNotEmpty(email)) {
model.addAttribute("email", email);
List<Dol_review> reviewList = reviewService.reviewList(pageable);
List<Nurse_info> nurse = nurseService.nurseList();
for (Nurse_info ni : nurse) {
String temp = "profile/s/" + ni.getNurse_photo();
ni.setNurse_photo(aes256.encrypt(temp));
}
model.addAttribute("review", reviewList);
model.addAttribute("nurse", nurse);
HttpSession session = request.getSession(false);
log.error("sessionId==============>{}", session.getId());
log.error("getMaxInactiveInterval=>{}", session.getMaxInactiveInterval());
log.error("creationTime===========>{}", new Date(session.getCreationTime()));
log.error("lastAccessedTime=======>{}", new Date(session.getLastAccessedTime()));
log.error("isNew==================>{}", session.isNew());
return "home";
}
}
}
// 로그인 만료 or 비 로그인자 일시
log.error("로그인 만료 or 쿠키 없음");
return "join/loginForm";
}
loginController
@SneakyThrows
@PostMapping("/loginBtn")
public int login(@RequestBody Map<String, Object> param, HttpServletResponse res, HttpServletRequest req) {
int result = 0;
String email = String.valueOf(param.get("email"));
String pw = String.valueOf(param.get("pw"));
user.setEmail(email);
user.setPw(pw);
log.error("emailCheckAct===>{}", user.getEmail());
log.error("pwCheckAct===>{}", user.getPw());
User idName = login.sql_login(email, pw);
if(idName!=null){
result = 1;
// 세션 저장 (세션 ID, 사용자 정보)
// 세션은 브라우저 당 1개 생성(시크릿 모드도 동일, 같은 브라우저에서 새탭 or 새창 띄워도 로그인 유지) / 쿠키는 시크릿 모드시 없어짐
req.getSession().setAttribute("email", user.getEmail());
req.getSession().setAttribute("id", idName);
// 쿠키 전달 (세션 ID)
res.addCookie(new Cookie("DolBom", req.getSession().getId()){{
setMaxAge(1800); // 자동 로그인 10 초 유지
setPath("/");
}});
StudyCookieService.createCookie(res, "EMAIL", email);
StudyCookieService.createCookie(res, "NAME", URLEncoder.encode(idName.getName(), "EUC-KR"));
StudyCookieService.createCookie(res, "ID", URLEncoder.encode("id="+idName.getId(), "UTF-8"));
}
log.error("idName===>{}", idName);
return result;
}
핵심
- 쿠키와 세션은 비슷한 역할을 하며, 동작 원리도 비슷함
- 가장 큰 차이는 정보가 저장되는 위치
- 쿠키는 클라이언트의 로컬 브라우저에 저장, 세션은 서버에 저장
- 세션은 보안적인 면에서는 쿠키보다 우수하지만 서버 메모리를 사용하기 때문에 저장되는 값이 많아질 수록 느려짐
- 쿠키는 클라이언트의 로컬 브라우저에 저장되기때문에 서버 메모리의 부담을 덜어줌
- 하지만 클라이언트가 가지고 있기 때문에 변질되거나 request에서 스니핑을 당할 우려가 있음
- 때문에 중요한 정보는 세션에 저장하고 세션 id나 캐시(css, js)등을 쿠키에 저장하고 서버 메모리의 부담도 덜어주어 서버 과부하, 성능 저하를 개선할 수 있음
댓글