세션은 만들어서 사용하는 것이 아니고 웹페이지에 이미 만들어져 있는 세션을 사용하는 것이다. 만약 현재 세션이 형성 되어 있다면 그걸 반환하고 없다면 새로운 세션을 생성해서 돌려준다.
● getSession(true) :
현재 사용중인 세션이 있다면 그걸 주고 없다면 새로운 세션을 만들어서 줘 라는 요청이다.
● getSession(false) :
현재 사용 중인 세션이 있으면 그 세션을 반환 하고 없으면 에러이다.
근데 이렇게 물어봐야 하는데 밑에 작성한 코드에는 없다. 왜그럴까? true 가 디폴트라는 것이다~
● HttpSession session = request.getSession();
Http로 부터 servlet에서 Session을 획득하는 메서드
jsp 페이지에서는 session 내장 객체 사용
● session.setAttribute("param1", "value1");
세션에 값을 저장하는 메서드이다. 세션이 invaildate 할 때 까지 가능하다. 쉽게 설명하면 로그인을 시작해 로그아웃 할 때까지 사용 가능하다는 이야기이다. session에 저장된 데이터는 클라이언트의 요청이 마무리 될 떄까지 유지하게 되며 request.setAttribute 와 다르게 페이지 이동에 제약을 받지 않는다. session.setAttribute 와 request.setAttribute의 다른 점은 아래에 포스팅 해 두었다.
● String val = (String) session.getAttribute("param1");
getAttribute 는 servlet 에서 세션을 꺼내는 메서드이다. String 변수 val를 선언 후 getAttribute를 이용하여 object 형태로 값을 꺼내 할당한다. object 형태이니, "param1"의 " " 는 필수이다. 또한, 꺼낸 값은 object 형태이기 때문에 String 으로 형 변환 시켜서 맞춰 주어야 한다.
jsp 페이지에서는 ${sessionScope.부를이름}
<!-- 세션에 저장한 로그인 아이디를 EL표현식을 품고 있는 sessionScope.loginId 이렇게 사용한다 -->
<h3>${sessionScope.loginId }님 로그인 성공</h3>
● session.removeAttribute("부를이름");
session에 저장한 정보를 지우는 메서드이다. 세션을 무효화 시키는 것이 아닌 저장한 정보만을 지우는 것임을 기억하
● String sessionId = session.getId();
세션아이디는 연결을 구분하는 고유의 값이다. 세션을 이용하면 서버가 해당 클라이언트가 누군지 알 수 있다. sesseionId는 16진수의 긴 난수로 이루어져 있기 때문에 중복 되지 않는다. 부여 받은 sesseionId는 쿠키에 담아서 클라이언트에게 맨 처음 딱 한번 보내진다. 클라이언트는 매 요청 시 request 헤더에 발급 받은 sessionId 를 담아서 서버에게 보낸다. 서버에서는 클라이언트에게 response 할 때 클라이언의 패킷 헤더에 세션아이디를 확인 후 보내기 때문에 어떤 클라이언트의 요청에 응답 해야 하는지 알 수 있다.
● session.invalidate();
세션 무효화 하는 메서드. 로그아웃 처리 하는 것과 마찬가즤
package test;
import java.io.IOException;
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;
/**
* Servlet implementation class SessionTest
*/
@WebServlet("/SessionTest")
public class SessionTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SessionTest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(); //세션 획득
session.setAttribute("param1", "value1"); //세션에 저장할 정보를 담아주기
String val = (String) session.getAttribute("param1"); //저장 된 정보 불러오기
System.out.println("session에 저장 한 값 " + val);
String sessionId = session.getId(); //세션 아이디 알아내기
System.out.println("sessionId : " + sessionId);
session.invalidate(); //세션 닫아주기
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
'MVC > 세션과 쿠키' 카테고리의 다른 글
쿠키(Cookie) 기초 (0) | 2023.03.31 |
---|---|
세션(session)을 이용하여 회원 가입 시 아이디 중복 체크 (0) | 2023.03.31 |
Scope개념 이해하기 (1) | 2023.03.31 |
쿠키(Cookie)와 세션(Session) (0) | 2023.03.30 |