본문 바로가기
JAVA/Java - Spring

[Java-Spring] 로그인 Seesion 처리

1. 웹페이지의 로그인 처리방법

 

웹페이지를 개발할때 로그인 처리는 필수적인 항목이라고 해도 무방할정도로 중요한 기능입니다. 웹에서의 로그인 처리방법은 여기서 이야기할 Session외에도 토큰과 쿠키를 이용하는 방법도 있지만 가장 대중적인 Session으로 처리하는 방법을 먼저 익혀야 한다고 생각합니다. 혹시라도 이제 막 로그인처리에 대한 공부를 하는 상황이라면 거이 대부분 이 Session을 이용한 로그인처리를 한다고 생각하시면 됩니다.

 

이 포스팅에서는 Session의 개념과 Session을 사용하는 방법 그리고 그 방법을 통해서 어떻게 로그인처리를 하는지 알아보겠습니다.

 

 

 

 

 

2. Session이란?

 

Session은 일종의 저장공간입니다. 클라이언트(사용자) 한명이 서버에 접속을 하면 그 클라이언트만의 저장공간에 서버에 생성이 되는데 이 공간이 바로 Session입니다. Session은 접속한 클라어언트만의 고유공간이기 때문에 만약 다른 사용자가 추가로 서버에 접속하면 서버는 기존의 Session이 아닌 새로운 Session을 생성하며 이는 서버에 접속한 클라이언트 숫자만큼 Session이 생성된다는 의미와 같습니다.

 

상황이 이렇다보니 Session을 이용한 로그인처리방법은 서버의 부담을 주기 때문에 이를 보완하기 위해서 토큰을 이용한 로그인처리도 요즘 많이 사용하고 있는 추세입니다.

 

위에서 이야기한 바와 같이 Session은 클라이언트만의 개인공간이기 때문에 개인 세션 공간에 그 사용자만의 고유정보를 집어넣고 필요할때마다 꺼내서 사용하는데 사용합니다. 예를 들어 로그인이 성공한 이후에 로그인한 계정의 정보를 집어넣는 식으로 사용하는 겁니다. 우리가 웹페이지에서 로그인 후 메인화면에서 xxx님 환영합니다와 같은 메세지는 분명 로그인 성공후 세션에 집어넣은 정보를 다시 가져와서 출력하고 있을 것입니다.

 

그렇다면 여기서 한가지 의문을 가져보도록 하겠습니다. 세션이 클라이언트 한명의 개인공간이라면 한개의 웹페이지에 한개의 컴퓨터로 동시에 로그인은 불가능하다는 소리입니다. 그런데 아시는 분들은 아시겠지만 크롬의 시크릿모드라던가 새로운 2개 이상의 다른 브라우져를 사용해서 동시에 로그인이 가능합니다. 이 말은 서버는 브라우저 단위로 접속한 클라이언트를 확인한다는 의미입니다. 그래서 같은 브라우저내의 새로운탭으로는 동시에 로그인이 불가능하지만 아예 실행중인 브라우저와 다른 브라우저를 실행시켜 로그인하면 되는 이유가 여기에 있습니다.

 

 

 

 

 

3. Session의 사용법

 

여기서는 Java를 통해서 Session을 사용하는 방법을 알아볼려고 합니다. Session을 사용하는 방법은 특별히 어려운 부분이 없기 때문에 Java에 대해서 기본적인 내용을 알고 있으신 분들은 쉽게 사용하실수 있습니다.

 

 

 

@RequestMapping(value = "/createSession", method = RequestMethod.GET)
public UserVO createSession(HttpServletRequest request) {

        HttpSession session = request.getSession();
        session.setAttribute("userVO", resultUserVO);

        return main;
}

- 세션의 생성와 데이터 입력

getsession을 이용해서 세션을 생성하는데 만약 기존에 이미 생성된 세션이 있었다면 기존의 Session을 반환합니다

 

 

 

@RequestMapping(value = "/getSession", method = RequestMethod.GET)
public UserVO getSession(HttpServletRequest request) {

        HttpSession session = request.getSession();
        UserVO userVO = (UserVO)session.getAttribute("UserVO");
        return main;
}

- 세션의 데이터 가져오기

세션의 데이터는 getAttribute를 이용하여 가져올수 있습니다. 앞서 Session에 입력했던 Key값을 파라메타로 던져주면 Value값이 리턴되어 나옵니다.

 

 

 

@RequestMapping(value = "/logout", method = RequestMethod.POST)
public String logout(HttpServletRequest request) {

        HttpSession session = request.getSession();
        session.invalidate();

        return "logout";
}

- 세션초기화

우선 현재 클라이언트의 세션을 가져온 이후에 invalidate함수를 이용해서 제거를 하면 됩니다. 정확히는 세션이 제거된다라고 이야기 하기보다는 초기화가 되었다고 하는게 더 맞는 표현인지도 모르겠습니다. 아무튼 세션의 정보가 모두 지워지면 그 이후부터는 어떠한 정보도 없기 때문에 로그아웃처리가 됩니다. 

 

 

 

@RequestMapping(value = "/remove", method = RequestMethod.POST)
public void remove(HttpServletRequest request) {

        HttpSession session = request.getSession();
        session.removeAttribute("userVO");
}

- 세션의 특정 속성 제거

세션중에 특정 부분을 제거하고 싶을때 사용합니다.

 

 

 

@RequestMapping(value = "/time", method = RequestMethod.POST)
public void time(HttpServletRequest request) {

        HttpSession session = request.getSession();
        session.setMaxInactiveInterval(int interval)
}

- 세션의 유효기간 설정

웹페이지를 사용하다가 오랜기간 움직임이 없으면 자동으로 로그아웃되는 현상을 보신적이 있을 겁니다. 이건 세션이 자동으로 만료되어 로그아웃이 되는 현상으로 setMaxInactiveInterval함수로 세션의 유효시간을 초단위로 설정할 수 있습니다. 만약 60을 넣으면 유효시간은 1분이 되겠네요

 

 

 

 

 

 

 

 

 

 

댓글