개발공부 일지
학원수업_40day [HTML,CSS,JSP,Servlet(7day) - Cookie / Session] 본문
학원수업_40day [HTML,CSS,JSP,Servlet(7day) - Cookie / Session]
짜몽- 2022. 9. 27. 11:48먼저 쿠키, 세션 사전정보에 대해 알아보자.



1. Cookie
클라이언트 측에 저장하는 작은 정보
저장 용량에 제한 ( 4kb ), 저장 데이터 타입의 제한 , 문자열만 가능
Cookie 생성시 유효시간을 설정하지 않으면 브라우저 실행시에만 유효,
유효시간 설정하면 그 유효시간까지 해당 Cookie는 지속되어 사용할 수 있다
step1.
서블릿이 쿠키 생성해서 클라이언트 측에 저장
클라이언트가 서버에 접속할 때 서버 프로그램이 클라이언트 측으로 쿠키를 전송하고 클라이언트 측에 저장한다.
WAS
client browser -- request --> SetCookieServlet
Cookie 생성 ( name, value )
cookie.setMaxAge(30); // 30초간 유효하도록 쿠키 설정
response.addCookie(cookie); // 응답시 쿠키를 클라이언트에 전달
<--response--
cookie 저장
step2.
클라이언트가 접속하면 쿠키 존재여부를 확인하고 후속 작업 수행
WAS
client browser -- request --> GetCookieServlet
request.getCookies() : Cookies[]
cookies[i].getName() 과 getValue() 를 이용해 쿠키 정보 이용
<-- response --

2. Session
- 사용자 정보를 서버 측에 저장
저장 데이터의 타입 및 용량에 제한이 없음 ( but 쿠키는 문자열 타입만 가능하고 4kb 로 저장용량이 제한 )
로그인, 로그아웃시에 세션이 이용된다
- 클라이언트의 요청이 발생하면 자동 생성된다.
- 서버상에 객체로 존재한다 ( 서버에서만 접근이 가능하여 보안이 좋다 )
세션 유효 기간 ( WAS 의 conf/web.xml 에 session timeout 설정 : apache tomcat 기본 설정은 30분)
1) 지정한 유효시간 내에 새로운 요청이 없으면 세션 만료
2) 브라우저 종료시 세션 만료
3) 로그아웃시 세션 만료

HttpSession 관련 주요 메서드
HttpServletRequest 의 method
- request.getSession(); or request.getSession(true);
: 기존 세션이 없으면 새로 생성해서 반환, 있으면 기존 세션을 반환
- request.getSession(false) : 기존 세션이 없으면 null 반환 , 있으면 기존 세션을 반환
HttpSession 의 method
- session.setAttribute(name,value) : 세션 객체에 name 과 value 쌍으로 정보를 저장
- session.getAttribute(name) : Object -> name 을 이용해 세션에 저장된 정보를 반환
- session.invalidate() : 세션을 무효화시킴. 주로 로그아웃시 사용
package org.kosta.webstudy18.controller;
import java.io.IOException;
import java.sql.SQLException;
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 org.kosta.webstudy18.model.MemberDAO;
import org.kosta.webstudy18.model.MemberVO;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String password = request.getParameter("password");
try {
MemberVO mvo = MemberDAO.getInstance().login(id, password);
if (mvo == null)
response.sendRedirect("login.fail.jsp");
else {
HttpSession session = request.getSession();
//기존 세션이 있으면 기존 세션 반환, 없으면 새로 생성
session.setAttribute("mvo", mvo);
//(name, value) : 새션 객체에 name 과 value 쌍으로 정보를 저장
response.sendRedirect("index.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
| 메서드 | 설명 |
| setAttribute(String attrName, Object attrValue) | 세션에 데이터를 저장한다 |
| getAttribute(String attrName) | 세션에서 파라미터로 지정된 이름의 속성된 데이터값을 받는다 |
| getAttributeName() | 세션에 저장되어 있는 모든 데이터의 이름 (유니크한 키 값)을 얻는다. |
| getId() | 자동 생성된 세션의 유니크한 아이디를 얻는다. |
| isNew() | 세션이 최초 생성되었는지, 이전에 생성된 세션인지를 구분한다 |
| setMaxInactiveInterval(int second) | 세션의 유효기간을 설정한다 |
| getMaxInactiveInterval | 세션의 유효기간을 얻는다 (가장 최근 요청시점을 기준으로 카운트 된다) |
| removeAttribute(String attrName) | 세션에서 특정 데이터(파리미터값) 제거 (세션제거X, 값을 삭제한다) |
| invalidate() | 세션의 모든 데이터를 삭제한다 |
- Session 과 Cookie 관계

| 쿠키 | 세션 | |
| 생성위치 | 클라이언트 | 서버 (측에 저장) |
| 보안 | 약한 | 강함 |
| 공유여부 | 여러 서버에서 공유가능 | 여러 서버에서 공유 불가 |
| 저장공간 | 저장할 수 있는 데이터가 제한적 (문자열타입만 가능, 4kb 저장용량 가능 ) |
저장할 수 있는 데이터가 제한이 없다 |
Cookie Session 을 쓰는 이유?
-> http는 stateless 하는 특성을 가지고 있다.
http는 클라이언트를 유지하고 있지 않다.
(스트링버퍼 쓰는 이유 ? 스레드세잎하기때문이다.)
WAS 는 사용자 요청에 대해 응답을 한 후, 연결을 해제한다. (Request, response 등을 해제)
- > 서버의 리소스 자원을 효과적으로 쓰기 위해 (서버자원을 효율적으로 쓰기 위해)
Cookie와 Session이 필요한 이유
-> HTTP 가 Stateless 한 특성을 가지기 때문
HTTP 의 특성 : Stateless
상태 유지하지 않는다 -> 접속한 사용자 정보를 유지하지 않는다
많은 사용자에게 서비스해야 하는 서버는 자원을 효과적으로 사용하기 위해 요청에 대한 응답이 되면
연결을 해제하고 사용자를 유지하지 않는다
세션 관리 : 사용자 정보를 일정 조건동안 유지
사용자 정보를 유지하는 방식 ( 상태 정보를 유지하는 방식 )
- 사용자 정보를 유지해야 할 필요가 있을 경우(장바구니, 인증기반 커뮤니티 등)에는
세션 관리가 필요하다
'학원수업 > Web(HMTL,CSS,JSP,Servlet)' 카테고리의 다른 글
| 학원수업_43day [HTML,CSS,JSP,Servlet(10day) - Model2-MVC / forward, redirect] (0) | 2022.09.30 |
|---|---|
| 학원수업_41day [HTML,CSS,JSP,Servlet(8day) - JSP] (0) | 2022.09.28 |
| 학원수업_39day [HTML,CSS,JSP,Servlet(6day) - ServletConfig, Servletcontext] (0) | 2022.09.26 |
| 학원수업_38day [HTML,CSS,JSP,Servlet(5day) - web ] (0) | 2022.09.23 |
| 학원수업_37day [HTML,CSS,JSP,Servlet(4day) - web ] (0) | 2022.09.23 |