본문 바로가기
Tip & Tech/Tech

JSESSION ID 바뀌는 현상 / jcaptcha 404 / change session / 세션유지 / session null 현상

by 나비와꽃기린 2020. 4. 29.

 

 

jcaptcha 를 로그인화면에 추가하여 로그인시 매번 그림문자를 입력하여 인증하게 하였는데

(원래는 5회 비밀번호를 틀렸을때 나오던 캡챠였는데, 회사 사정상 임시로 

로그인시 매번 입력하도록 변경조치가 내려옴)

 

캡챠그림문자를 알맞게 입력하면 바로 로그인이 되지만

패스워드를 잘못 입력했을 경우

 

(1) 로그인시도(+캡챠인증문자)

(2) 잘못된 패스워드이므로 session에 loginFailCnt를 증가시키고 프로세스 마친후, 다시 로그인페이지로

 

여기에서 (1) 에서는 캡챠가 잘 나오나 (2)번 이후 jacptcha가 서비스가 되지 않았다.

(jcaptcha에서 그림문자를 가져오는 url을 갑자기 404로 인식하면서 안 가져오는...)

 

새로고침과 화면이동을 해가며 알아낸 결과...

 

(2)번 에서 기존에 https 였던 url이 http로 변경되면서

http에서는 캡챠가 정상적으로 서비스가 되지 않았던 것...

 

따라서 jcaptcha 를 가져오는 ajax 로직에

error : function(){

 location.href = "https://<%=strHost%>/나머지url";

}

 

을 입력하여 404에러 떨어질 시 https로 페이지 이동하게끔 조치하였더니 잘 되더라는........

 

 

 

+ 번외!

이후 다시 정책이 바껴 jcaptcha를 로그인화면에서 걷어내고

5회이상 틀렸을시에만 보여주기로 했다.

그런데 JSESSIONID가 계속 바뀌는 현상이...

그래서 SESSION에 저장하는 loginFailCnt 값이 계속 1로만 인식ㅠㅠ

(session 자체가 null이 되어서 1->2로 count up 되지 않고 계속 1만 됨)

 

--> session.invalidate(); //세션초기화 하는 부분이 있나

--> struts2에서 session에 문제있나..

--> HttpSession을 다시 생성하나 

--> 화면을 redirect하는 부분이 있나

--> session.removeAttribute() 하는 부분이 있나

--> sessionid가 변하나

 

등을 확인했었음.

 

뻘짓을 오래 했지만

이 문제도 http, https 문제였다.

다음과 같은 스크립트를 추가하여 해결

 

<script>

 if(document.location.protocol === 'https:'){

   document.location.href = document.location.href.replace('http:','https:');

}

</script>

 

https://velog.io/@minosmlee/Tomcat-HTTP-HTTPS-%EA%B0%84-%EC%A0%84%ED%99%98-%EC%8B%9C-Secure-Cookie-%EC%9D%B4%EC%8A%88에 추가하여 로그인시 매번 그림문자를 입력하여 인증하게 하였는데

 

(원래는 5회 비밀번호를 틀렸을때 나오던 캡챠였는데, 회사 사정상 임시로 

 

로그인시 매번 입력하도록 변경조치가 내려옴)

 

 

 

캡챠그림문자를 알맞게 입력하면 바로 로그인이 되지만

 

패스워드를 잘못 입력했을 경우

 

 

 

(1) 로그인시도(+캡챠인증문자)

 

(2) 잘못된 패스워드이므로 session에 loginFailCnt를 증가시키고 프로세스 마친후, 다시 로그인페이지로

 

 

 

여기에서 (1) 에서는 캡챠가 잘 나오나 (2)번 이후 jacptcha가 서비스가 되지 않았다.

 

(jcaptcha에서 그림문자를 가져오는 url을 갑자기 404로 인식하면서 안 가져오는...)

 

 

 

새로고침과 화면이동을 해가며 알아낸 결과...

 

 

 

(2)번 에서 기존에 https 였던 url이 http로 변경되면서

 

http에서는 캡챠가 정상적으로 서비스가 되지 않았던 것...

 

 

 

따라서 jcaptcha 를 가져오는 ajax 로직에

 

error : function(){

 

 location.href = "https://<%=strHost%>/나머지url";

 

}

 

 

 

을 입력하여 404에러 떨어질 시 https로 페이지 이동하게끔 조치하였더니 잘 되더라는........

 

 

 

 

 

 

 

+ 번외!

 

이후 다시 정책이 바껴 jcaptcha를 로그인화면에서 걷어내고

 

5회이상 틀렸을시에만 보여주기로 했다.

 

그런데 JSESSIONID가 계속 바뀌는 현상이...

 

그래서 SESSION에 저장하는 loginFailCnt 값이 계속 1로만 인식ㅠㅠ

 

(session 자체가 null이 되어서 1->2로 count up 되지 않고 계속 1만 됨)

 

 

 

--> session.invalidate(); //세션초기화 하는 부분이 있나

 

--> struts2에서 session에 문제있나..

 

--> HttpSession을 다시 생성하나 

 

--> 화면을 redirect하는 부분이 있나

 

--> session.removeAttribute() 하는 부분이 있나

 

--> sessionid가 변하나

 

 

 

등을 확인했었음.

 

 

 

뻘짓을 오래 했지만

 

이 문제도 http, https 문제였다.

 

다음과 같은 스크립트를 추가하여 해결

 

 

 

<script>

 

 if(document.location.protocol === 'https:'){

 

   document.location.href = document.location.href.replace('http:','https:');

 

}

 

</script>

 

 

정답은 이거였다!

tomcat 설정을 바꾸는 방법이 가장 이상적이지만

제품서비스 문제 & 사이드이펙트 문제를 고려하여 우리는 스크립트로 처리하기로 함.

"tomcat에서 HTTP <-> HTTPS 전환 시에 세션이 유지되지 않는 현상"

또 하나 배웠네 (!)

 

 

[Tomcat] HTTP <-> HTTPS 간 전환 시 Secure Cookie 이슈

웹사이트 로그인 시 보안을 위해 HTTPS로 접근하여 로그인을 처리한다. 이후 웹사이트 이용 중 HTTP로 프로토콜 전환이 발생할 때 웹 브라우저는 세션을 읽어오지 못하는 증상이 발생한다.좀더 세부적으로 두가지 상황이 존재한다.Index 페이지에 HTTP로 접속 ->

velog.io

 

 

 

 

 

댓글0