🐢🐢꼬부기 LV.2 | 실습•에러/🛡️껍질에 숨기(에러해결)

로그아웃 만들기 response is not defined 에러 해결

서화 2025. 11. 19. 00:11

로그아웃 기능을 만들다가 사용자에게 알람 띄우고 메인화면으로 돌아가게 하는 과정에서 response is not defined가 발생했다

발생한 이유는 JavaScript 코드 내에서 response라는 객체를 찾을 수 없기 때문에 발생한 것이다

 response.sendRedirect() 코드를 <script> 태그 안에 넣었기 때문에 에러가 발생한 것

<script>
// 사용자에게 로그아웃 성공 알림창 띄우기
alert("성공적으로 로그아웃 되었습니다")
// 메인으로 돌아가기
response.sendRedirect("controller.jsp?command=MAINPAGE");

</script>

수정을 위해  response.sendRedirect()를 스크립트 밖으로 뺏으나 이번에는 알림창이 뜨지 않고 바로 메인페이지로 돌아가는 이슈가 발생했다

제미나이에게 물어본 결과 알림창이 뜨지 않은 이유는 페이지를 실행하게 되면 JSP 파일이 서버에서 HTML을 생성한다

그 다음서버가 <%response.sendRedirect(...)%> 코드를 만나자마자, 생성 중이던 모든 HTML 응답을 취소하고, 브라우저에게 "새로운 주소로 즉시 이동하라"는 명령을 보낸다.따라서 브라우저는 즉시 메인페이지로 이동하게 된다

즉 리다이렉트 명령이 너무 빨라서, 브라우저가 <script> 태그를 읽고 alert()를 실행할 기회조차 얻지 못햇기때문이다

그래서 리다이렉트대신 window.location.href을 사용해야한다

완성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 로그아웃을 시킬려면 메인에서 로그아웃을 눌렀을때 로그아웃이 진행이 되어야함 
	그럴려면 일단 로그아웃으로 연결되는 페이지가 있어야하고 
    그 페이지에서 알람을 띄운 다음에 다시 메인으로 가야함  -->
	<% 
	//세션에 저장된 정보를 비워야함
	session.invalidate();
	%>	
	
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그아웃</title>
</head>
<body>
<script>
// 사용자에게 로그아웃 성공 알림창 띄우기
alert("성공적으로 로그아웃 되었습니다");
//메인으로 돌아가기 
<%--response.sendRedirect("controller.jsp?command=MAINPAGE"); --%>
//스크립트 밖으로 response.sendredirect를 사용하려고 했으나 alert가 뜨지 않고 바로 메인페이지로 넘어감.... 
window.location.href="controller.jsp?command=MAINPAGE";

</script>

</body>
</html>

 

✔️session.invalidate();

invalidate의 역할

session.invalidate();는 이 세션 저장 공간 자체를 파괴하고 삭제하는 메서드다

이 코드가 실행되면, 세션에 저장되어 있던 모든 정보(예: userInfo, 장바구니 데이터 등)가 서버 메모리에서 완전히 사라진다

이후 해당 세션 객체를 사용하려 한다면 새로운 세션이 생성된다. invalidate()로 세션을 삭제한다면 해당 삭제한 세션을 사용할 수 없다.

주로 로그아웃 시 세션을 완전히 종료할 때 사용하거나 회원 탈퇴를 할 때도 사용 할수 있다

session.invalidate(); = 세션 자체를 파괴(무효화)한다

session.removeAttribute("userInfo"); = 세션은 유지한채 특정 값만 제거한다 따라서 세션의 특정값만 없어진 것이므로 세션의 재사용이 가능하다