Java Web #2

황현근·2023년 6월 8일
0

Acorn-Academy

목록 보기
24/28
post-thumbnail

Session

웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다.
그리고 정보를 유지를 위해 javax.servlet.httpHttpSession 인터페이스를 구현해서 사용한다.

🔔 세션의 주요 메소드

세션값 설정

session.setAttribute("설정한 세션아이디", 세션에 넣을 값);
session.setAttribute("id", id)

예 시

<% -----login.jsp

  //1. 폼 전송되는 id, pwd 를 읽어와서
    String id = request.getParameter("id");
    String pwd = request.getParameter("pwd");
  //2. UsersDto 에 담기
    UsersDto dto = new UsersDto();
    dto.setId(id);
    dto.setPwd(pwd);
  //3. UsersDao 에 전달해서 유효한 정보인지 확인해서
    boolean isValid = UsersDao.getInstance().isValid(dto);
  /*
    4. 유효한 정보이면 로그인 처리를 하고 응답한다.
       유효한 정보가 아니면 아이디 혹은 비밀번호가 틀려요 라고 응답한다.

       [ 로그인 처리 ]
       session scope 에 "id" 라는 키값으로 로그인된 아이디를 저장하면 된다.
       여기서 session scope 란 HttpSession 객체의 setAttribute() 메소드를 이용해서
       값을 저장하는 영역을 말한다.
   */
    if(isValid){
        //session scope 에 id 라는 키값으로 로그인된 아이디 담기
        session.setAttribute("id", id);
    }

    //로그인 후 가야할 목적지 정보
    String url = request.getParameter("url");
    //로그인 실패를 대비해서 목적지 정보를 인코딩한 결과도 준비한다.
    String encodedUrl = URLEncoder.encode(url);
%>

세션에 저장된 값 가져오기

session.getAttribute("id");

예 시

<% -----signup.jsp
  //아이디
  String id = request.getParameter("id");
  //비밀번호
  String pwd = request.getParameter("pwd");
  //직업
  String job = request.getParameter("job");
  //성별
  String gender = request.getParameter("gender");
  //취미
  String[] hobby = request.getParameterValues("hobby");
  String hobbyResult = "";
  if (hobby != null){
    //반복문 돌면서
    for (int i = 0; i < hobby.length; i++){
      //i번째 방에 있는 선택된 취미를 불러온다.
      String tmp = hobby[i];
      hobbyResult += tmp;
      if (i != hobby.length-1) hobbyResult += "/";
    }
  }
  //문자열에서 특정문자("/")로 구분해서 String[] 을 얻어내기
  String [] result = hobbyResult.split("/");

  //문자열에 특정 문자가 포함되어 있는지 여부
  boolean isContain = hobbyResult.contains("xxx");

  // null 이면 체크를 안한 것이고 null 이 아니면 체크를 한 것이다.
  String allEmail = request.getParameter("allowEmail");
  String allMessage = request.getParameter("allowMessage");
  /*
     textarea 에 입력한 문자열은 개행, tab, 공백기호가 모두 포함되어 있다.
     해당 문자열을 DB 에 저장했다가 다시 불러와서 textarea 에 출력하고 싶으면
     textarea 의 innerText 에 출력하면 된다.
   */
  String comment = request.getParameter("comment");
%>

세션 값 삭제하기

removeAttribute(String name);
//invalidate로 모든 세션을 한 번에 삭제할 수 있다.
invalidate();

예 시

  <%
    //session scope 에 id 라는 키값으로 저장된 값 삭제하기
    session.removeAttribute("id");
  %>
  <script>
    alert("로그아웃 되었습니다.")
    //javascript 를 이용해서 페이지 이동
    location.href="../"
  </script>

Cookie는 쉽게 말해서 프로그램에서 흔적을 남기는 것이다. 클라이언트와 서버가 연결을 시도한 흔적을 남겼다가, 후에 또 연결을 시도할 시 과거의 접속을 이어나가기 위해 흔적을 사용하는 방법이다.(서버가 아닌 클라이언트 쪽에 저장)
보안에 취약하므로, 중요한 정보는 저장하지 않는다.

  • 클라이언트의 웹브라우저에 특정 key 값으로 문자열을 저장할 수 있다.
  • 저장할 수 있는 문자열은 Base64 인코딩 형식의 64가지 문자열을 저장할 수 있다.
    (Tomcat 8.5 는 자동으로 처리 되어서 인코딩이 필요 없다)

쿠키 생성

//쿠키 객체 생성 new Cookie("key", value);
Cookie cook=new Cookie("savedMsg", msg);

쿠키 확인하기
크롬에서 쿠키 확인하는 방법은 개발자도구(F12) - Application Tap - Cookies 에서 확인

사용 예시

<form action="cookie_save.jsp" method="post">				--- cookie_form.jsp
	<label for="msg">웹브라우저(client side)에 저장할 문자열 </label>
	<input type="text" name="msg" id="msg"/>
	<button type="submit">저장</button>
</form>
----------------------------------------------------------------------
<%															--- cookie_save.jsp
	//폼전송되는 문자열 읽어오기
	String msg=request.getParameter("msg");
	//모든 문자열을 다 저장하려면 tomcat 8 이하 버전에서는 인코딩을 해서 저장을 한다.
	String encodedMsg=URLEncoder.encode(msg, "utf-8");
	//1. 쿠키 객체 생성 new Cookie("key", value);
	Cookie cook=new Cookie("savedMsg", encodedMsg);
	//2. 쿠키 유지시간 (초단위)
	cook.setMaxAge(60); //60초 테스트
	//3. HttpServletResponse  객체에 담는다.
	response.addCookie(cook);
	//4. 응답할때 쿠키가 자동으로 응답되고 클라이언트의 웹브라우저에 저장이 된다. 
%>
<body>
<p>웹 브라우저에 savedMsg 라는 키값으로 "<%=msg %>" 를 저장했습니다.</p>
<a href="cookie_read.jsp">저장된 문자열 확인 해보기</a>
</body>
----------------------------------------------------------------------
<%
	//HttpServletRequest 객체를 이용해서 요청과 함께 전달된 쿠키 읽어내기
	Cookie[] cooks=request.getCookies();					--- cookie_read.jsp
	//"savedMsg" 라는 키값으로 저장된 문자열을 저장할 변수
	String savedMsg=null;
	if(cooks!=null){
		//반복문 돌면서 쿠키 객체를 하나씩 참조
		for(Cookie tmp:cooks){
			//쿠키의 키값을 읽어온다.
			String key=tmp.getName();
			if(key.equals("savedMsg")){//만일 우리가 찾는 키값이라면 
				//해당 키값으로 저장된 value 를 읽어내서 디코딩을 한다. 
				savedMsg=URLDecoder.decode(tmp.getValue(),"utf-8");
			}
		}
	}
%>
<body>
<p> savedMsg  라는 키값으로 저장된 문자열 : <%=savedMsg %></p>
<a href="cookie_form.jsp">다시 테스트</a>
</body>

0개의 댓글