22.03.23-쿠키,세션 그리고 로그인, 로그아웃
로그인 홈 페이지 만들기
- 기존 홈에 있던 로그인, 회원가입 버튼이 로그아웃, 상품관리 버튼으로 변경되어야 함
- 세션, 쿠키 개념이 도입돼야 함
- 로그아웃 - 세션만료를 이용해야 함
쿠키 ,,, 핵심 : 쿠키엔 중요 정보를 담지 않아야 한다
-
쿠키는 보안상 문제가 있다 -> 세션 사용
-
쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다. 그리고 서버에서 토큰을 관리한다.
-
토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야 한다.
-
해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 해당 토큰의 만료시간을 짧게(예: 30분) 유지한다. 또는 해킹이 의심되는 경우 서버에서 해당 토큰을 강제로 제거하면 된다.
세션
- UUID 생성으로 만들어진 랜덤값을 세션ID로 사용하여 쿠키게 담아서 전달함
세션을 직접 만들어서 하는 건 생략, 서블릿에서 지원하는 세션 사용하기
//request에서 세션 가져오기
HttpSession session = request.getSession();
//세션에 로그인 회원 정보 담기
session.setAttribute(SessionConst.MY_SESSION, loginMember);
하나의 세션에 여러 값을 저장할 수 있다.
세션 옵션 true/false
request.getSession(true)
세션이 있으면 기존 세션을 반환한다.
세션이 없으면 새로운 세션을 생성해서 반환한다.
request.getSession(false)
세션이 있으면 기존 세션을 반환한다.
세션이 없으면 새로운 세션을 생성하지 않는다. null 을 반환한다.
로그아웃
@GetMapping("/logout")
public String logout(HttpServletRequest request){
HttpSession session = request.getSession(false);
if (session != null){
session.invalidate();
}
return "redirect:/";
}
session.invalidate();
수정사항
login 메서드 수정
- LoginService 에서 login 메서드 로직 중 Boolean -> Member로 수정
- Member로 받아야 LoginController에서 session에 담을 수 있다.
- session.setAtrribute(SessionConst.MY_SESSION, loginMember)
- loginMember를 담아야 하는 이유는 로그인 후 홈 화면(loginHome.html)에서 멤버 정보를 활용하기 위함(***님 환영합니다.. 등등)
TrackingModes - 첫 로그인 오류발생시 해결방법
- 로그인을 처음 시도하면 URL이 다음과 같이 jsessionid 를 포함하고 있는 것을 확인할 수 있다
http://localhost:8080/;jsessionid=F59911518B921DF62D09F0DF8F83F872
- 이것은 웹 브라우저가 쿠키를 지원하지 않을 때 쿠키 대신 URL을 통해서 세션을 유지하는 방법이다
- URL에 세션 아이디를 포함하고 싶지 않다면 아래 코드를 application.properties에 추가하면 된다.
server.servlet.session.tracking-modes=cookie
Author And Source
이 문제에 관하여(22.03.23-쿠키,세션 그리고 로그인, 로그아웃), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@invigorating92/220323
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
쿠키는 보안상 문제가 있다 -> 세션 사용
쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다. 그리고 서버에서 토큰을 관리한다.
토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야 한다.
해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 해당 토큰의 만료시간을 짧게(예: 30분) 유지한다. 또는 해킹이 의심되는 경우 서버에서 해당 토큰을 강제로 제거하면 된다.
세션을 직접 만들어서 하는 건 생략, 서블릿에서 지원하는 세션 사용하기
//request에서 세션 가져오기
HttpSession session = request.getSession();
//세션에 로그인 회원 정보 담기
session.setAttribute(SessionConst.MY_SESSION, loginMember);
하나의 세션에 여러 값을 저장할 수 있다.
request.getSession(true)
세션이 있으면 기존 세션을 반환한다.
세션이 없으면 새로운 세션을 생성해서 반환한다.
request.getSession(false)
세션이 있으면 기존 세션을 반환한다.
세션이 없으면 새로운 세션을 생성하지 않는다. null 을 반환한다.
@GetMapping("/logout")
public String logout(HttpServletRequest request){
HttpSession session = request.getSession(false);
if (session != null){
session.invalidate();
}
return "redirect:/";
}
session.invalidate();
http://localhost:8080/;jsessionid=F59911518B921DF62D09F0DF8F83F872
server.servlet.session.tracking-modes=cookie
Author And Source
이 문제에 관하여(22.03.23-쿠키,세션 그리고 로그인, 로그아웃), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@invigorating92/220323저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)