본문 바로가기
CLASS/SPRING,JSTL

#9-3 / Session 등록시 주의사항

by hingu 2024. 7. 28.
@PostMapping("/loginok.do")
public String loginok(String mid,HttpServletRequest req) {
    HttpSession session = req.getSession();
    session.setAttribute("mid", mid);
    
    
    //일반 쇼핑몰 기준 페이지 이동 없을 때 유지시간 30분 지정 
    //-> 해당 부분이 없으면 페이지 몇번 이동하다보면 계속 로그아웃 발생해서 에러 발생할 수 있음
    session.setMaxInactiveInterval(1800); //1800초 : 30분

    System.out.println(mid);

    return null;
}

 

@PostMapping("/loginok.do")
public String loginok(
    @RequestParam(value="null", required = false) String mid,
    HttpSession session
) {

	if(mid != null) {
            session.setAttribute("mid", mid);
            session.setMaxInactiveInterval(1800);
       }

    System.out.println(mid);

    return null;
}

=> 요건 session 등록하는 좀더 편한 다른 방식! (원래 정통은 위에 방식)

HttpSesson : Interfaced를 활용하여 세션을 빠르게 구현하는 방식 스타일


 

로그인 성공 -> 세션이 등록되어있는 경우

@GetMapping("/restapi.do")
public String restapi(
	@SessionAttribute(name="mid", required = false) String mid 
) throws Exception {

    System.out.println(mid); //등록되어있는 세션값 찍힘

    return null;
}

가져올 때는 굳이 http ~ interface ~ getattribute~ 어쩌구~~ 또 만들어서 안가져와도 되고 어노테이션 사용하면 됨!

 

@SessionAttribute 어노테이션을 사용 : 

session이 이미 등록외어있는 상황일 경우 해당 정보를 가져올 수 있음

=> null 뜨면 로그인 하라고 alert띄우면 됨 ! (required = false 사용 : 넘어와도 되고 안넘어와도 됨)

 

===> RESTAPI 제작시 사용하면 좋다 ! 

         로그인 하면 ->  해당 사용자에 맞게 데이터를 ajax로 전송!  

 

 

세션 파기  : hs.invalidate();

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
HttpSession hs = request.getSession();
String mid = (String)hs.getAttribute("mid");
out.print(mid);
hs.invalidate(); //session 전체 파기
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>