일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- openaddressing
- JDBC
- IT기본지식
- 서블릿용어
- 오라클오류
- 크리스탈레포트누끼
- 추상클래스
- fcmwebpush
- 크리스탈리포트이미지삽입
- 이미지누끼
- lombok
- 타임존
- 롬복
- 게시판댓글
- EC@
- jdbc연결안됨
- 서버기본
- 타임존설정
- RequestBody
- import안될때
- ResponseBody
- @RunWith
- 크리스탈레포트그림
- 스토리지기본
- 크리스탈레포트이미지
- api문서만들기
- 크리스탈리포트이미지
- git
- Ajax
- 자료구조
- Today
- Total
엠마의 개발공부일지
세션이 이런일이 본문
착각
혼자 엄청난 착각을 하고있었다.
스프링서버를 구동하고 웹브라우저가 열리면 내가 세션을 생성해야만 있는줄 알았고,
그 세션을 조회하는건 세션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에 위의 코드를 적용하여
"로그인이 되어있는경우/그렇지 않은경우"로 나누어서 보이는 버튼이 다르게 구현함.
지금하고있는 팀프로젝트에서는 스프링 시큐리티를 모르기때문에 세션을 적용했는데, 이부분으로 며칠동안 고민했었다.
알게되었으니 속이 시원하네:)
팀원들도 엄청 궁금해하는 부분이니 빨리 알려야겠다(로그인 후 세션유지가 안되서 다같이 멘붕이었으므로...)
새로 토이프로젝트 시작하면 시큐리티 적용해서 로그인/관리자페이지 관리할 수 있게 해야겠다.
'Stack > JSP & Servlet' 카테고리의 다른 글
타임존 설정하는 2가지 방법 (0) | 2020.11.25 |
---|---|
mysql서버구동이 안될 때 (2) | 2020.11.25 |
JDBC프로그래밍을 하기위해선 "타임존"설정이 필수! (1) | 2020.11.24 |
JSP로 JDBC프로그래밍 하기 (0) | 2020.11.23 |
Servlet용어정리 (0) | 2020.11.04 |