웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다.
그리고 정보를 유지를 위해javax.servlet.http
의HttpSession
인터페이스를 구현해서 사용한다.
🔔 세션의 주요 메소드
세션값 설정
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>