쿠키
쿠키란 웹 페이지들 사이의 공유 정보를 클라이언트 PC에 저장해놓고 필요할 때 여러 웹 페이지들이 공유해서 사용할 수 있도록 매개 역할을 하는 방법
-- 정보가 클라이언트 PC에 저장됩니다.
-- 저장 정보 용량에 제한이 있습니다(파일 용량은 4kb)
-- 보안이 취약합니다.
-- 클라이언트 브라우저에서 사용 유무를 설정할 수 있습니다.
-- 도메인당 쿠키가 만들어집니다(웹 사이트당 하나의 쿠키가 만들어집니다).
쿠키는 보안에 취약하기 때문에 주로 보안과 무관한 경우에 한해 사용합니다.
예) 웹 페이지를 방문했을 때 팝업창에 '오늘은 더 이상 보지 않기' 체크에 사용.
서버가 클라이언트한테 주는 정보조각 > 쿠키
콘텐츠에 들어가는 빨간색이 쿠키 아이디!
세션
쿠키와 같은 웹 페이지들 사이의 공유 정보를 서버에 저장해 두고 웹 페이지들을 매개해 주는 방법
하지만, 쿠키는 클라이언트 PC에 저장되어 보안에 약하다.
반면, 세션은 서버의 메모리에 생성되어 정보를 저장하기에 보안 굿.
세션은 각 브라우저당 한개, 즉 사용자당 한 개가 생성된다.
-- 정보가 서버의 메모리에 저장
-- 브라우저의 세션 연동은 세션 쿠키를 이용
-- 쿠키보다 보안에 유리
-- 서버에 부하를 줄 수 있음
-- 브라우저당 한 개의 세션이 생성
-- 세션은 유효 시간을 가집니다(기본 유효 시간은 30분)
-- 로그인 상태 유지 기능이나 쇼핑몰의 장바구니 담기 기능 등에 주로 사용
자바 스크립트는 쿠키만 확인 가능하다. (세션은 x)
회원가입
+ 로그인 상태
+ 로그아웃
member.controller
> Login.java
> Logout.java
package member.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.service.MemberService;
import member.service.MemberServiceImpl;
import member.vo.MemberVo;
@WebServlet("/member/login")
public class Login extends HttpServlet{
private MemberService memberService = MemberServiceImpl.getInstatnce();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 화면 (회원등록)
// req.getRequestDispatcher("/WEB-INF/jsp/member/login.jsp").forward(req, resp);
RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/jsp/member/login.jsp");
rd.forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 로직 (회원등록)
req.setCharacterEncoding("utf-8");
String id = req.getParameter("id");
String pwd = req.getParameter("pwd");
System.out.println(id);
System.out.println(pwd);
MemberVo memberVo = memberService.login(id, pwd);
if(memberVo != null) { // 로그인 성공
HttpSession session = req.getSession();
req.getSession().setMaxInactiveInterval(600);
session.setAttribute("member", memberVo);
} else { // 로그인 실패
}
resp.sendRedirect("list"); // list.jsp으로 이동
}
}
package member.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/member/logout")
public class Logout extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getSession().invalidate();
resp.sendRedirect("list");
}
}
member.dao
> MemberDao.java
memberDao
public MemberVo login(String id, String pwd) {
MemberVo memberVo = null;
try {
conn = DBConn.getConnection();
String query = "SELECT * FROM T_MEMBER WHERE ID = ? AND PWD = ?";
pstmt = conn.prepareStatement(query); // 전처리 시킴
pstmt.setString(1, id);
pstmt.setString(2, pwd);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
int idx = 1;
memberVo = new MemberVo(
rs.getString(idx++),
rs.getString(idx++),
rs.getString(idx++),
rs.getString(idx++),
rs.getDate(idx++)
);
}
rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return memberVo;
}
WEB-INF
> jsp
> member
> list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>${pageContext.session.id}</h2>
<h2>${pageContext.session.maxInactiveInterval}</h2>
<div>
<c:if test="${empty member}">
<p>로그인 하지 않은 상태</p>
<a href="login">로그인 하러 가기</a>
</c:if>
<c:if test="${not empty member}">
<p>로그인 한 상태</p>
<p>${member.name} 님 환영합니다.</p>
<a href="logout">로그아웃</a>
</c:if>
</div>
<table>
<tr>
<th>아이디</th>
<th>비밀번호</th>
<th>이름</th>
<th>이메일</th>
<th>가입일</th>
</tr>
<c:forEach items="${sessionScope.members}" var="member">
<tr>
<td>${member.id}</td>
<td>${member.pwd}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td>${member.joinDate}</td>
<td><a href="remove?id=${member.id}">삭제</a></td>
</tr>
</c:forEach>
</table>
<a href="register">회원등록</a>
</body>
</html>
'자바 풀스택 공부' 카테고리의 다른 글
Day 50. [JSP/Servlet] 커스텀 태그 (0) | 2022.03.18 |
---|---|
Day 49. [JSP/Servlet] useBean (0) | 2022.03.16 |
Day 48. [JSP/Servlet] 롬복 설정, 회원가입 만들기 (0) | 2022.03.15 |
Day 47. [Java] InputStream, OutputStream (0) | 2022.03.14 |
Day 46. [JSP/Servlet] 라이프 사이클 (0) | 2022.03.14 |
댓글