1216 | 스프링의 정석 :: 2-25 (게시판 내 로그인 연동-세션&쿠키&request)

세션과 쿠키 ✔ board게시판 연결하기 1. boardController.jsp만들기 2. boardController.class만들기 3. 기본 뼈대 + 맵핑 @Controller @RequestMapping("/board")// 보드랑 연결 public class BoardController { @GetMapping("/list")// 리

ala-nueva.tistory.com

▲ 이어지는 실습

 

 

실습 2. 게시판 → 로그인 → 홈이 아닌 게시판이 그대로 뜨도록 작업하기

목표

: 로그인 했을때 홈으로 돌아가는것보단 해당 화면(게시판)이 다시 뜨는게좋음.

 

해야할 일

: 각 부분의 from-to를 확인할 것

 

전체 진행

 

 

/board/list를 넘기기 위한 세부관계도

boardController.java - from : /ch2/  // request.getHeader("referer") 로 알아낼수있다
- to : /board/list // request.getRequestURL()으로 알아낼수있다
loginForm.jsp - from : /board/list 여야 하지만 Redirect라서 /ch2/가 나온다
- to : / login/login (get방식)
LoginController.java - from : login/login
- to : /login/login (post방식)
- loginForm에게 /board/list 의 URL/URI를 전달해서 거기서 loginContoller에게 재전달해야 게시판으로 로그인 가능
- boardController.java는 /board/list의 url을 알고 있음

 

 

1. BoardController에서 URL값을 얻는다

@GetMapping("/list")
	public String list(HttpServletRequest request) { // request 추가
		if(!loginCheck(request))
			return "redirect:/login/login?toURL="+request.getRequestURL(); //getRequesURL으로 /board/list를 붙여서 반환.
		// 로그인화면에게 겟방식으로 데이터를 넘긴다

👉 redirect:/login/login에 toURL을 붙여서 가려고 하는 /board/list를 얻는다.

 

 

 

2. loginForm.jsp에 인포 필드를 만든다

  <input type="text" name="id" value="${cookie.id.value}" placeholder="이메일 입력" autofocus>
        <input type="password" name="pwd" placeholder="비밀번호">
        <input type="hidden" name="toURL" value="${param.toURL}"> // 타입을 text로 만들어서 끌려오는지 확인 후 hidden으로 바꾼다
        <button>로그인</button>

가려고 하는 주소가 끌려왔다. 인풋값 타입을 텍스트로 해서 끌려오는걸 확인하고 타입을 다시 히든으로 바꿔서 가리면 됨!!
히든으로 가린 후에 소스보기에서도 확인 가능

 

 

3. LoginController에서 값을 받아 board/list로 리다이렉트 하게 만든다

@PostMapping("/login")
	public String login(String id, String pwd, String toURL, boolean rememberId,HttpServletRequest request, HttpServletResponse response)throws Exception{
	// 매개변수에 toURL추가
    
		//1. id와 pw를 확인
		//2-1	일치 하지 않으면 loginForm으로 이동
		
		//2-2. id와 PW가 일치하면
		// 세션 객체 얻어오기
		// 세션 객체에 아이디를 저장
		// 쿠키를 생성하고
		// 응답에 저장
		// 홈으로 이동 (지역변수에 들어오는 URL값에 따라 홈으로 갈 수도 있고 보드게시판으로 갈 수도 있다)
		toURL= toURL==null || toURL.equals("")? "/" : toURL; // toURL값이 널이거나, 내용이 없으면 홈으로 이동, 아니면 toURL로 이동
	
    return "redirect:"+ toURL; //String에 대한 반환값
	}

👉 리턴값에 toURL을 추가시켜준다

 

 


실습3. 세션이 가동되는 범위 설정하기. session = "true" or session="false"?

목표

: 세션이 가동되는 범위를 설정해서 서버의 부담을 덜도록 한다

 

해야할 일

: 세션이 필요한 구역 확인

 

👉 index.jsp & loginForm.jsp에 <%@ page session = "false" %> 를 넣는다.

 

세션을 시작할까?에 대한 답! 세션이 있을때 세션이 없을때
session = "true" 세션을 만들지 않음 세션 생성
session = "false"

1. 세션이 필요없는 .jsp화면에 적용한다

2. 기존 세션에 영향을 미치지 않는다
세션 생성하지 않음
* 이미 세션이 시작된 뒤에는 session = false라고 연결된 세션이 끊어지는게 아니다. 단지 새로운 세션을 만들지 않는다는 뜻

 

 session="false" 설정시 유의해야 할 점

: sessionScope와 pageContext.session은 사용 불가.

: sessionScope.id를 ▶ pageContext.request.getSession(false).getAttribute("id")로 변경해야 함

: STS에서 에러라고 표시해도 무시하면 됨

[참고]getSession(true)는 session이 없는 경우 session을 새로 생성하기 때문에, session이 없어도 새로 생성하지 않도록 getSession(false)를 사용

 

 

👉 홈을 눌러도 쿠키가 생기지 않는다.

👉 게시판 클릭시 로그인 화면으로 이동하면서 세션 생성+ 쿠키생성준비

 

 


❓여기서 문제

세션이 없어서 로그인 완료화면에서도 로그인으로 표기된다
게시글은 세션이 있으므로 로그아웃으로 표기됨

 

로그인/아웃을 표시하는 코드는 이렇게 session.scope를 사용하는데,

<c:set var="LoginOutLink" value="${sessionScope.id==null ? '/login/login':'/login/logout'}"/>
<c:set var="LoginOut" value="${sessionScope.id==null? 'Login':'Logout'}"/>

session=false를 사용함으로써 sessionScope를 쓰지 못해서 계속 로그인으로만 표시된다. (즉 쿠키가 로그인 후에나 생기므로 같은 브라우저에서 로그인했다는 기록이 남지 않아서 변동이 안되는듯?

이런 경우는 어떻게 하지? 뒷 강의에서 나오나 보고 고민을 해봐야겠다.

 


 

SessionScope란 무엇인가

정의

: 웹브라우저별로 관리하는 변수범위

: 각 브라우저가 접속했을시 관리되는 변수범위

 

사용이유

: 접속한 웹 브라우저별로 정보를 관리하고 싶을 때

👉 장바구니처럼 사용자별로 유지가 되어야 할 정보가 있을 때 사용

 

✔ 특징

: 웹 브라우저별로 변수 관리 

👉 웹브라우저의 탭간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 세션정보를 사용한다.

: HttpSession 인터페이스를 구현한 객체 사용 

: 서블릿에서는 HttpSession session = request.getSession();  메소드로 객체를 얻는다

: JSP 에서는 session 내장변수 사용

: 값저장 setAttribute(), 값읽기 getAttribute()

 

 

참고한 블로그

 

Session Scope에 대해

Session Scope 사용이유: 접속한 웹 브라우저별로 정보를 관리 하고 싶을 때 세션 scope를 사용합니다. 이번 시간엔 이러한 세션 스코프에 대해서 좀 더 자세히 알아보도록 하겠습니다. 정의: session sco

beoks.tistory.com

 

 

+ Recent posts