Redirect(++) / Session 객체 삭제 /Cookie

DeadWhale·2022년 5월 3일
0

Servlet/JSP

목록 보기
9/22
post-thumbnail

Redirect (재요청) Request Scope 유지 안되는 이유.

클라이언트의 요청을 받은 후 Redirect 요청을 하게 되면
기존에 있던 HttpServletRequest / HttpServletResponse 객체가 삭제 후 재 생성된다 그래서 request Scope로 내장 객체를 선언하면 비워지게 된다.

Request가 유지되지 않기 때문에 특정 데이터를 전달하거나 유지하고 싶으면 Session / Application 범위에 세팅해야 한다.


로그아웃 구현

Session 객체로 유지되고 있는 로그인 정보를 지우기 위해
/community/member/logout 으로 get방식 요청을 않다(a태그는 모두 get방식)

@WebServlet("/member/logout")
public class LogoutServlet extends HttpServlet {

		@Override
		protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

			//로그아웃
			//session Scope에 세팅된 회원 정보를 없애는 거.

			
			//Session 얻어오기
			HttpSession session = req.getSession();
			
			// 1) Session 에서 회원 정보만 없애기
			//session.removeAttribute("loginMember"); //session에 있는 loginMember만 제거
			
			// 2) Session 전체를 없애고 새로운 Session 만들기. (주로 사용됨 . 로그아웃만 하는게 아니라 남긴 흔적도 지워야하기 때문에.)
			session.invalidate();//invalidate : 무효화  == session 무효화 
														//현재 세션을 없어지면 새로운 새션이 자동으로 재생성
			
			
			//메인페이지로 돌아가기 	resp.sendRedirect(req.getContextPath());
			//메인페이지는 최상위 주소(/community)로 요청햇을 때 화면
			//req.getContextPath() 는 최상위 주소를 의미한다. 
			resp.sendRedirect(req.getContextPath()); 
		}
}

1) 세션 단 한개만 지운다

2) 세션객체를 전부 없애고 새로운 객체를 만드는다

(주로 사용)


브라우저에 파일(file)의 형태로 저장된다
특정 사이트에 접속할 경우 해당 사이트의 쿠키파일이 불러와진다.

아이디 저장용으로는 사용하지만 비밀번호 같은 보안이 중요한 자료는 사용하면 안된다.

로그인할때 체크하고 진행하니깐 로그인 서블릿에서 로그인 결과가 성공적으로 조회될 경우

쿠키를 생성한다.

생성 및 사용 방법

1) 서버가 요청에 대한 응답을 할때 쿠키를 생성한 후 응답에 쿠키를 담아서 클라이언트에게 전달
2) 응답이 담긴 쿠키가 브라우저에 파일의형태로 저장이 된다
3) 이후 특정 주소요청 시 쿠키파일을 브라우저가 찾아 자동으로 요청에 실어서 보낸다
4) 서버는 요청에 실려온 쿠키파일을 사용한다.

//("클라이언트에 저장되는 쿠키 이름 " ,  쿠키 값 )
Cookie c = new Cookie("saveId", memberEmail);
				
//아이디 저장이 체크된 경우
if(req.getParameter("saveId") != null) {
//쿠키파일을 30일 동안 유지한다 
	c.setMaxAge(2592000);					
}else {
  //쿠키파일을 0초동안 유지한다.
  //->만약에 기존에 아이디가 존재하는 경우 쿠키파일의 유지시간을 0초로 덮어씌워서 
  //  사용자는 인지하지 못하고 삭제된다.
  c.setMaxAge(0);
}
// 이 쿠키 파일이 적용될 주소
	c.setPath( req.getContextPath() );
//req.getContextPath() : 최상위 주소
// /Community로 시작하는 주소에서만 쿠키를 적용하겟다.

//응답 객체를 이용해서 클라이언트로 전달
resp.addCookie(c); 
//이 코드가 해석 되는 순간 바로 전달된다 
//(Response 가 사라지기 전에 전달되어 영향권 밖이다)
				

0개의 댓글