엠마의 개발공부일지

세션이 이런일이 본문

Stack/JSP & Servlet

세션이 이런일이

Emmababy 2021. 1. 9. 17:28
728x90

 

착각

혼자 엄청난 착각을 하고있었다.

스프링서버를 구동하고 웹브라우저가 열리면 내가 세션을 생성해야만 있는줄 알았고, 

그 세션을 조회하는건 세션ID라고 생각했다. 

 

결론먼저 적자면

웹브라우저가열리면 세션은 자동으로 생기며, 새로고침하면 새로운 세션(세션ID)가 생김

invalidate(세션없애는메서드)를 하면 세션ID가 없어져야하는줄 알았으나 그게아니고 세션에 저장된 정보가 사라지는것.

(세션ID는 그대로 있다, invalidate()를 작성하면 session.getAttribute("xxx"); 로 조회해볼때 null값이 나오게됨)

 

 

 

 

해결

웹브라우저가 열리면 세션은 자동생성

(JSESSIONID=쿠키, 세션을 업어서 데리고다니는 쿠키정도로 이해)

관리자모드에 있는 세션확인

 

콘솔에 찍어본 세션아이디

 

session.getId()는 개발자모드에 있는 id를 조회하는것일뿐,

현재 세션이 있고없고를 판별하는게 아니었다.

단지 현 상태의 세션넘버를 찍어줄 뿐(위 두개가 동일함을 알 수 있다)

 

그러니 현재 내가필요로하는 세션이 있는지 확인할땐 아이디를 찍어볼게아니라,

세션에 저장된(.setAttribute) id가 있는지를 확인해야한다

 

❌ session.getId();

session.getAttribute("id"); 

 

 

 

 

 

그래서 세션에저장된 아이디가 있을때와 아닐때를 나눠서 코드를 작성하면된다.

나는 세션에 저장된 아이디가있을때(로그인에 성공했을때) logout버튼이 보이게,

세션에 저장된 아이디가없을떄 login버튼이 보이게 코딩했다.

 

 

 

 

 

 

 

 

 

➕ 덧붙이기

위의 코드로부터 출력되는 jsp페이지에서 세션을 유지하는 방법

스크립트릿으로 세션에 저장된 아이디를 가져오기위함
하단부 코드에 조건문 작성

 

세션에 저장된 아이디가 있을때만 Mypage메뉴가 보이게 작성함

해당코드는 html의 header부분으로, 사이트내에 모든페이지에 포함되어있어서

header.jsp에 위의 코드를 적용하여

"로그인이 되어있는경우/그렇지 않은경우"로 나누어서 보이는 버튼이 다르게 구현함.

 

 

 

 

 

 

 

 

 

 

 

지금하고있는 팀프로젝트에서는 스프링 시큐리티를 모르기때문에 세션을 적용했는데, 이부분으로 며칠동안 고민했었다.

알게되었으니 속이 시원하네:) 

팀원들도 엄청 궁금해하는 부분이니 빨리 알려야겠다(로그인 후 세션유지가 안되서 다같이 멘붕이었으므로...)

새로 토이프로젝트 시작하면 시큐리티 적용해서 로그인/관리자페이지 관리할 수 있게 해야겠다.

728x90
Comments