클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

쿠키와 세션 3 - 세션 객체 메소드와 세션 삭제에 대하여 본문

웹 · 앱 개발/JSP & Servlet

쿠키와 세션 3 - 세션 객체 메소드와 세션 삭제에 대하여

huenuri 2024. 8. 29. 16:46

아침에 조금 시간이 있어 세션 관련 학습을 이어서 진행해보려고 한다. 이번에는 세션 메소드에 대해서 알아볼 것이다.


 

 

 

 

세션 관련 메소드

세션에 대한 여러 정보를 알아오기 위해서는 세션 객체에 대한 메소드를 사용해야 한다. 세션 객체의 메소드들 중에서 세션에 대한 정보를 얻어오는 함수들을 다시 살펴보겠다.

세션 객체는 JSP 내장 객체로 항상 존재하고 있다. 하지만 브라우저가 실행될 때마다 서로 다른 세션이라는 것을 구분하기 위해 고유의 ID 값을 저장하고 있다. 세션의 메소드가 궁금하다면 getID() 메소드로 알 수 있다. 이 메소드는 해당 세션을 가리키는 고유 ID 값을 String 형으로 변환한다.

 

 

 

getCreationTime()은 세션이 만들어진 시간을 반환한다. 웹 브라우저를 띄울 때마다 세션이 생성되므로 그 시간을 알려준다. getLastAccessedTime()은 새롭게 웹 브라우저를 띄우지 않고 이미 띄운 웹 브라우저에서 다른 페이지로 이동했다가 돌아오는 경우가 있는데 만일 사이트를 떠날 당시의 시간을 얻고 싶을 때 이 메소드를 사용한다. 해당 세션에 클라이언트가 마지막으로 request를 보낸 시간을 long 형으로 반환한다.

inNew()는 해당 세션이 처음 생성되었으면 true 값을 반환하고 이전에 생성된 세션이라면 false를 반환하는 메소드이다. getMaxInactiveInterval()은 세션의 유효 시간을 얻는다. 유효 시간은 사용자의 마지막 요청이 있은 후로부터 기본적으로 30분이다.

 


 

 

 

 

세션 객체의 메소드 사용하기

 

 

새로운 세션이 생성되었으므로 머문 시간은 0분이라고 출력된다. 어느 정도 시간이 흐른 후 새로고침을 하게 되면 다음과 같이 세션 ID는 동일하고 웹사이트에 머문 시간이 증가되었음을 볼 수 있다.

 

 

이번에는 새로운 세션이 만들어지지 않았으므로 아니오라고 출력이 되고 있다.


 

 

세션 관련 메소드는 어떤 경우에 사용할까? 세션 ID는 서로 다른 세션인지 구분하기 위해 사용되는 것으로 세션이 바뀌면 이전에 세션에 저장되었던 정보를 더이상 사용하지 못하도록 해서 보안 유지를 하는 경우에 사용한다.

웹 사이트에 머문 시간을 알아보는 이유는 온라인상에서 은행 업무를 보는 경우 일반적으로 일정 시간이 지나면 자동 로그아웃이 되는데 이러한 처리를 위해서는 세션이 생성된 시간과 액세스된 시간을 비교해서 머문 시간을 계산해보아야 한다.

한번 생성된 세션 객체는 무한정 사용할 수 있는 것이 아니다. 유효 시간을 지정해두면 그 시간까지만 사용 가능하다. 


 

 

 

 

세션 제거하기

로그인 되어 있는 상태에서 브라우저를 닫지 않고 자리를 비운다면 그 사이에 개인 정보가 유출될 수 있다. 이럴 때 로그아웃 후에 자리를 비워야 한다. 로그아웃 처리 과정에서 세션이 설정되어야 사용 가능한 회원 전용 페이지에는 접근하지 못하도록 하기 위해 세션에 저장된 속성 값을 제거해야 한다. 

이렇게 세션에 저장된 특정 속성 값을 제거하기 위해 사용하는 메소드가 removeAttribute() 메소드이다.


 

 

 

세션에 저장된 특정 개체 삭제하기

 

 

근데 이상하게도 값이 순서대로가 아닌 뒤죽박죽으로 출력이 되었다. 그  이유는 세션 속성들이 Enumeration으로 가져올 때 순서가 보장되지 않기 때문이다. HttpSession 객체에서 속성들을 가져올 때, 속성들이 특정한 순서로 저장되지 않으며, 내부적으로 HashMap이나 비슷한 구조로 저장되어 있기 때문에 순서가 보장되지 않는다.


 

 

 

세션을 삭제하는 실습

 

 

화면에는 나타나지 않지만 쿠키는 삭제되었다. 세션에는 여러 키들을 지정하여 값들을 저장할 수 있다. 저장된 값들이 유지되면 이전의 정보를 다른 웹 페이지에서도 가져다 쓸 수 있다. 이러한 세션의 유효 시간은 기본적으로 30으로 잡혀 있다. 하지만 세션이 더 이상 사용되지 않는다면 세션 정보도 더 이상 필요하지 않다. 이때 설정된 세션의 값들을 모두 사라지도록 하려면 세션 객체의 invalidate()를 사용한다. 이 메소드는 해당 세션을 없애고 세션에 속해있는 값들을 모두 없앤다.


 

 

 

설정된 모든 세션 제거하기

 

세션의 값을 모두 삭제했으므로 이제 세션 아이디는 유효하지 않다. 앞의 예제에서는 특정 세션만을 삭제했었다.

 

 


 

 

 

학습을 마치고

이제 세션이 어떻게 만들어지고 삭제하는지를 알게 되었다. 사실 오후에 딥러닝 수업이었는데 이번주에 이틀 정도 머신러닝 수업을 들어보니 별로 도움도 되지 않고 어차피 이 분야를 공부할 것도 아니라 수업이 너무나도 지루했다. 차라리 그 시간에 다른 공부를 하는 게 훨씬 더 효율적이었다. 지난주에 그랬던 것처럼 나만의 공부방에서 개인 공부를 하는 중이다.

난 게임 개발자로 진로를 확실히 정했으므로 여기에 필요한 공부만을 하려고 한다. 웹 개발도 하면 좋겠지만 이건 기본 정도만 해보려고 한다.

그리고 담임선생님과 어제 잠깐 상담을 했는데, 내게는 팀 프로젝트에 들어가지 말고 개인 프로젝트를 진행하는 것이 훨씬 좋겠다고 하셨다. 어딜가든 선생님들은 내가 자유롭게 지낼 수 있도록 배려를 많이 해주신다. 아마도 그럴 때 내가 가장 열심히 하고 잘할 수 있다는 걸 아시는 듯하다.