웹 세션 관리

16457 단어
1. 세션 관리의 기본 원리 1.숨겨진 영역은 폼의 내용을 페이지를 표시할 때 숨기고 데이터를 표시하지 않으며 JSP에서 input 태그 type을hidden으로 설정하여 숨겨진 폼 영역을 생성합니다.세션의 유일한 표지를 숨겨진 영역의value 값에 기록하고name 값을 설정합니다.서버에 커밋하면 서버는 세션 ID에 따라 세션 객체를 찾습니다.단점: 실현이 비교적 번거롭고 안전성이 떨어지며 은밀한 데이터에 적합하지 않다.쿠키 서버는 세션 대상에 설정된 세션의 유일한 표지를 저장합니다. 클라이언트는 세션 표지를 쿠키에 저장하고 브라우저가 요청을 보낼 때 쿠키에서 세션 표지를 얻어 서버에 보냅니다.3. URL 다시 쓰기는 URL 주소 끝에 세션 ID를 추가하고 원래의 URL 주소를 바꾸며 세션을 유일하게 표시하는 정보는 매개 변수로 URL에 추가됩니다. 주로 브라우저 쿠키가 비활성화된 경우에 사용됩니다.단점: 전체 웹 응용 프로그램에서 하이퍼링크나 스크립트에서 URL을 사용하려면 세션 ID를 추가해야 하고, 웹 응용 프로그램의 각 페이지는 동적 생성이 필요하며, 클라이언트가 정적 페이지에 접근할 때 세션 ID가 분실되고 동적 페이지로 돌아갈 때 이전 세션을 계속할 수 없습니다.쿠키 비활성화 웹 프로젝트에서 context를 열거나 만드는 것을 비활성화합니다.xml 파일
<?xml version="1.0" encoding = "utf-8"?>
<Context cookies = "false" path = "/ch06">// Cookie 
</Context>

HttpSession 세션은 모든 요청자가 하나의 Session 대상에 대응하는 것을 관리합니다. 클라이언트의 모든 상태 정보는 이 대상에 저장됩니다. 첫 번째 요청 서버에서 Session 대상을 만듭니다.서브렛의 경우
HttpSession session = request.getSession();// session 
session.setAttribute("","");// session 

JSP에 내장된 Session 객체 HttpSession의 라이프 사이클 1.HttpSession 객체의 생성 클라이언트가 서버에 처음 액세스할 때 서버는 브라우저마다 다른 SessionID 값을 생성합니다. 2.HttpSession 객체의 사용은 HttpSession 객체를 만든 후 Session 객체를 사용하여 데이터에 액세스하고 전송합니다(1).생성된 SessionID 값을 쿠키에 저장합니다(2).클라이언트가 다시 요청을 하면 SessionID를 request와 함께 서버에 보냅니다(3).서버에서 요청한 SessionID에 따라 서버에 저장된 Session과 대응합니다. 3.HttpSession 객체의 소멸(1).브라우저를 닫습니다(2).HttpSession의 invalidate () 메서드를 호출합니다(3).Session 시간 초과 HttpSession의 유효기간은 Session에 유효한 장치를 설정합니다. 사용자가 session에 이 유효기간을 초과하면 session이 효력을 상실하고 메모리에서 제거합니다.(JSP에 접근할 때만 Session을 만들 수 있고, 정적 페이지에 접근할 때만 session 대상을 만들 수 없습니다) 유효기간 설정: 1.해당하는 웹 서버 설정에서 모든 세션의 유효기간을 설정합니다. 2.session의 setMaxInactiveInterval(long interval)을 호출하여 웹에 설정합니다.xml에서 수정
<session-config>
	<!-- 30 -->
	<session-timeout>30</session-timeout>
</session-config>	

HttpSession 세션 관리 인스턴스 설명 jsp 소스 코드
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("utf-8");
    String message = "";
    String flag = request.getParameter("flag");
    if ((flag!=null)&&(flag.equals("small"))){
        message = " ";
    }else if((flag!=null)&&(flag.equals("big"))){
        message = " ";
    }else if ((flag!=null)&&(flag.equals("success"))){
        message = " ";
    }
%>
<html>
<head>
    <title> </title>
</head>
<body>
    <form action="/test" method="post">
         :<input type="text" name="number"/>
        <span style="color: red"><%=message%></span>
        <input type="submit" value=" ">
    </form>

</body>
</html>

.java 원본
 public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        String gussnumber = request.getParameter("number");
        int number = Integer.parseInt(gussnumber);
        HttpSession session = request.getSession();
        Integer currnumber = (Integer) session.getAttribute("currnumber");
        if(currnumber ==null){
            currnumber = 1+(int)(Math.random()*50);
            session.setAttribute("currnumber",currnumber);
        }
        if(number>currnumber){
            RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession .jsp?flag=big");
            re.forward(request,response);
        }else if(number<currnumber){
            RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession .jsp?flag=small");
            re.forward(request,response);
        }else {
            RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession .jsp?flag=success");
            re.forward(request,response);
        }
    }

주로 Math를 사용합니다.random 방법은 1~50의 무작위 수를 만들어서session에 저장합니다.논리를 판단한 후 RequestDispatcher의 forward 방법을 이용하여 이동합니다.

좋은 웹페이지 즐겨찾기