1213 WebServer 6일차
로그인 하는 과정
사용자 입장에서는
-메인
-로그인화면
-로그인성공화면
이렇게만 보이지만 실제로는 이런 방식으로 진행된다..
session & cookie 이해하기
http는 상태를 관리하지 않음.(보관x)
오는 요청에 응답할 뿐...
그리고 응답이 완료되면 연결이 끊김.
하지만 상태를 유지해야할 경우가 있다. [사용자 로그인 유지]
이것을 가능하게 해주는게 쿠키와 세션이다.[로그인과 무관하고 상태만 유지]
쿠키:클라이언트쪽에 저장
세션:서버쪽에 저장
[기본 30분 제한 시간이있고, 이 후 폐기되어 유효하지않은 세션이 됨, 이런 경우 새로운 세션을 생성하여 클라이언트에 전송]
서버에는 하나의 세션만 있는게 아니고 수많은 세션들이 있음.
이중에서 내가 원하는 세션을 찾아 매칭할수있어야하는데, 클라이언트와 서버간 요청/응답시 헤더에 원하는 sid로 매칭.
db의 정보는 갱신이 되었는데 페이지에 즉각 반영이 되지 않은 이유
현재 세션이 이전 loginMember 세션이기 때문임.
회원탈퇴 a 태그 : get 방식
하지만 회원탈퇴는 delete 이므로 post방식을 사용해야 한다.
우회하는 방법
Filter
servlet마다 공통된 작업이 있다면 filter를 사용해서 중복을 제거할 수 있다.
servlet보다 앞 / jsp보다 늦게 즉, client<->server단 에서 말 그대로 "필터" 역할을 하는 것.
-
http://localhost:8080/mvc/member/memberDetail
=>로그인 후 마이페이지 순으로 접근해야 하는데
주소창에 해당 주소만 쳐도 비로그인 상태에서도 접근이 가능해짐
이런경우를 막아보자.
//인증여부검사
HttpSession session = req.getSession();
Member loginMember = (Member) req.getSession().getAttribute("LoginMember");
if(loginMember==null)
{
session.setAttribute("msg","로그인 후 사용 가능합니다.");
//그리고 인덱스페이지로 강제이동
resp.sendRedirect(req.getContextPath()+"/");
return;//조기리턴 이후 코드 실행되지않는다
}
//tip:redirect나 forward 이후에는 실행코드는 없어야 한다.
각 서블릿 상단에 중복되는 코드라 filter를 적용하면 좋을 것 같다.
filter 역할을 할 class를 하나 생성한 뒤,
WebFilter annotation에 해당 필터를 적용할 servlet 페이지를 나열하면 된다.
@WebFilter(urlPatterns = {
"/member/memberDetail",
"/member/memberUpdate",
"/member/memberDelete"
})
public class AuthenticationFilter extends HttpFilter {
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
//인증여부검사
HttpSession session = request.getSession();
Member loginMember = (Member) request.getSession().getAttribute("LoginMember");
if(loginMember==null)
{
session.setAttribute("msg","로그인 후 사용 가능합니다.");
//그리고 인덱스페이지로 강제이동
response.sendRedirect(request.getContextPath()+"/");
return;//조기리턴 이후 코드 실행되지않는다
}
//tip:redirect나 forward 이후에는 실행코드는 없어야 한다.
super.doFilter(request, response, chain);
}
}
get | post |
조회 (멱등) 즉, 조회 전 후 상태가 달라지지 않음. | 등록 수정 삭제 |
select | insert update delete |
forward를 통한 view(jsp)사용 | redirect를 통한 url 변경 forward인 경우 계속 그 페이지를 실행하기 때문에 등록,수정,삭제가 새로고침 등을 할 때마다 중복 실행됨. |
a태그 location href 속성 open()함수 form - method get |
form - method post |
멱등: 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질