오늘은 오랜만에 JAVA로 돌아와서 Session에 관한 내용을 다루려고 한다.
내가 Session을 주제로 정한 이유는 사내 프로젝트 개발 중 관리자 권한에 대한 처리를 다룰 때 유용하게 사용하였고, 그 내용을 글로 정리하고 싶었다.
세션은 각각의 클라이언트 관한 정보가 서버에 저장되는 것을 말한다.
사용자 컴퓨터에 저장되던 쿠키와 다르게 서버에 저장하여, 비교적 보안이 필요한 데이터는 쿠키보다 세션에 저장한다.
세션은 서버가 종료되거나 유효기간이 지나면 사라진다.
HttpSession session = reuqest.getSession(); HttpSession session = request.getSession(ture);
requset의 getSession()메서드는 서버에 생성된 세션이 있다면 세션을 반환하고, 없다면 세 세션을 생성하여 반환한다(인수의 default는 true).
인수를 false를 전달하면 이미 생성된 세션이 있을 때 그 세션을 반환하고 없으면 null을 반환한다.
setAttribute(String name, Object value)
setAttribute는 name,value 객체 형태로 세션에 값을 저장하는 메서드다.
String myName = (String)session.getAttribute("name");
getAttribute 메서드를 통해 세선에 저장한 값을 활용할 수 있다.
리턴 타입은 기본적으로 Object이므로 다른 자료형으로 활용시 형변환이 필요하다.
1. removeAttribute(String name);
removeAttribute(name) 메서드를 통해 해당하는 세션 정보를 삭제할 수 있다.
2. invalidate();
invalidate로 모든 세션을 한 번에 삭제할 수 있다.
기본적으로 세션은 30분으로 설정이 되어있다. 클라이언트가 30분 이상 서버에 아무런 요청이 없다면, 세션이 자동을 끊어진다.
해당 세션 유지 시간은 web.xml 파일에서 별도로 설정한다.
@Controller @SessionAttribute("name") { @PostMapping("/test") public String test(@ModelAttribute("name") Test test) { ... } }
<form:form action="login" method="post" modelAttribute="user"> Email : <form:input path="email" /><br> Password : <form:password path="password" /><br> <button type="submit">Login</button> </form:form>