오늘의 노래 추천 👖
- 아티스트
- TWICE (트와이스)
- 앨범
- Merry & Happy
- 발매일
- 1970.01.01
저 초록 앨범 커버만 봐도 심장이 뜀. . . 정말로
그리구 이거랑 feel special, alcohol free, scientist 도 진짜 좋아해여 개취로
DAY 5
ㅡ 쿠키(cookie)와 세션(session) ㅡ

연결을 계속 유지한다면 클라이언트가 늘어남에 따라 불필요한 서버자원 소모

ㅡ 쿠키(cookie) ㅡ
cookie : client (browser)에 저장되는 키와 값이 들어있는 작은 데이터 파일

Cookie cookie = new Cookie ( "test", "testCookie" )
ㅡ 쿠키 객체 생성, 만료 기간 설정, 클라이언트 응답 ㅡ
Cookie, setMaxAge, response.addCookie

1. 쿠키 객체 생성
2. 만료 기간 설정
3. 클라이언트로 쿠키 응답
ㅡ 쿠키 불러오기 name, value 출력 ㅡ
request.getCookie, for문

4. 생성된 쿠키 모두 가져오기
5. 각 쿠키의 name 과 value 확인
ㅡ 쿠키 삭제 ㅡ
setMaxAge, addCookie

ㅡ 세션(session) ㅡ
session : 브라우저가 종료되기 전까지 클라이언트의 정보를 유지

사용자의 정보를 서버에서 관리
서버에서 중복되지 않는 클라이언트 별 SessionID 발급 후 사용자 식별에 사용
ㅡ> SessionID는 브라우저가 종료될 때 까지 보관
[ 자바에서 세션 실습 ]
ㅡ 세션 값 저장 ㅡ
setAttribute

// Ex04SetSession.jsp
<body>
<%
session.setAttribute("id", "아이디");
session.setAttribute("age", 22);
// 배열값 생성
ArrayList<String> fu = new ArrayList<String>();
fu.add("apple");
fu.add("banana");
session.setAttribute("fu", fu);
%>
<a href="Ex05GetSession.jsp">세션확인</a>
<a href="Ex05GetSession">세션확인(Servlet)</a>
</body>
쿠키는 한번에 하나의 정보만 저장할 수 있는 반면
세션은 여러개의 세션을 묶어서 보낼 수 있음 ( 예를들어 VO, DTO 등도 묶어보낼 수 있음 )
ㅡ> 서버에 값이 저장됨
ㅡ 세션 확인 ㅡ
getAttribute

//Ex05GetSession.jsp
<body>
<%
// 식별자 이름으로 getAttribute 한 값은 object 타입이므로 String으로 형변환
String id = (String)(session.getAttribute("id"));
Integer age = (Integer)session.getAttribute("age");
ArrayList<String> fu = (ArrayList<String>)(session.getAttribute("fu"));
%>
id: <%=id %>
age: <%=age %>
fu: <%=fu %>
<a href="Ex06RemoveSession.jsp">세션삭제</a>
<a href="Ex07Invalidate.jsp">세션모두삭제</a>
</body>

getAttribute 와 식별자 이름을 이용해 세션값 불러오기
object 타입의 값이므로 형변환
ㅡ 세션 값 삭제 ㅡ
removeAttribute

// Ex06RemoveSession.jsp
<body>
<%
// int 타입의 session 값 확인
session.removeAttribute("age");
%>
<a href="Ex05GetSession.jsp">세션확인</a>
</body>
null 값을 가질 수 없는 int 타입의 session 값을 삭제하면 오류가 뜸
ㅡ> null을 가질 수 있는 Integer 을 사용해야함

ㅡ 세션 값 모두 삭제 ㅡ
invalidate

세션을 모두 한번에 삭제하기 위해 Invalidate 메서드 사용

ㅡ Servlet 으로 세션 확인 실습 ㅡ
request.getsession
요청이 들어왔을 때 세션 id 를 부여하고 저장함으로 request 객체를 사용
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String id = (String)session.getAttribute("id");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(id);
}

ㅡ Session 로그인 실습 ㅡ

// Ex08LoginForm.html
<body>
<form action="Ex08LoginCheck">
<table>
<tr>
<td><input type="text" name="id" placeholder="아이디를 입력하세요"></td>
</tr>
<tr>
<td><input type="password" name="pw" placeholder="비밀번호를 입력하세요"></td>
</tr>
<tr>
<td><input type="submit" value="LOGIN"></td>
</tr>
</table>
</form>
</body>
// Ex08LoginCheck (Servlet)
public class Ex08LoginCheck extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String pw = request.getParameter("pw");
HttpSession session = request.getSession();
PrintWriter out = response.getWriter();
if(id.equals("test")&&pw.equals("12345")){
session.setAttribute("id", id);
session.setAttribute("pw", pw);
response.sendRedirect("Ex08Main.jsp");
}else {
response.sendRedirect("Ex08LoginForm.html");
}
}
}
// Ex08Main.jsp
<body>
<%
String id = (String)session.getAttribute("id");
%>
<%=id %>님 환영합니다
<a href="Ex08Logout">로그아웃</a>
</body>
// Ex08Logout (Servlet)
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate();
response.sendRedirect("Ex08LoginForm.html");
}

ㅡ Cookie 와 Session 차별점 ㅡ

쿠키는 사용자 정보를 클라이언트에 저장하는 반면 세션은 서버에 저장
쿠키가 세션보다 상대적 보안이 불안한 대신 속도가 더 빠름
쿠키는 설정 만료일이 되면 삭제되고 세션은 브라우저 종료 시 삭제됨
ㅡ Scope ㅡ
JSP 페이지 내 객체들은 어디서든 모두 정해진 영역 안에서만 사용 가능

ㅡ Page Scope ㅡ
선언된 JSP 페이지 내에서만 사용 가능

pageContext 내장객체로 사용 가능
ㅡ> 저장된 값은 저장된 페이지 내 에서 지역변수로 사용
ㅡ PageContext 실습 ㅡ
PageContext, setAttribute



ㅡ> 같은 페이지 내에서만 값을 불러올 수 있음
ㅡ page scope 주 사용 용도 ㅡ
EL 표기법 사용 시



ㅡ> pageContext, request, session 객체 모두 setAttribute와 EL 표기법으로 사용가능
ㅡ Request Scope ㅡ
클라이언트로부터 요청을 받고 응답할 때까지 사용 가능

ㅡ> 요청이 끝나고 새 요청을 받기전까지 사용

ㅡ Request scope 주 사용 용도 ㅡ
클라이언트 요청을 다룰 때
forward 로 데이터를 넘겨 유지하고자 할 때

ㅡ Request Scope ㅡ
세션이 유지되는 동안 사용 가능

ㅡ Session scope 주 사용 용도 ㅡ
로그인 시 사용자 정보를 저장하고 싶을 때 주로 사용
ㅡ Application Scope ㅡ
웹 어플리케이션이 사용되는 동안 사용 가능

ㅡ Application scope 주 사용 용도 ㅡ
모든 클라이언트들이 공통적으로 사용하는 값 저장
ㅡ Page vs Request Scope ㅡ

디자인 패턴 중 하나인 mvc 패턴

(수정중)

BYE