Cookie and Session


Cookie and Session


HTTPプロトコルで通信しているページ間では何の情報共有もありません.
ステータスまたは情報を共有するには、세션 트래킹のWeb接続機能を実装する必要があります.

1.非表示ラベル:非表示ラベルの使用

<input type="hidden" name="user_address" value="서울시 성북구" />
<input type="hidden" name="user_email" value="[email protected]" />
<input type="hidden" name="user_hp" value="010-111-2222" />

2.URL書き換え:get方式でURLの後ろに貼り付けて使用

user_address = URLEncoder.encode(user_address, "utf-8");
out.print("<a href='/pro09/second?user_id=" + user_id 
			                    + "&user_pw=" + user_pw 
			                    + "&user_address=" + user_address
			                    + "'>두 번째 서블릿으로 보내기</a>");

3.Cookieの使用


Cookieは、Webページの共有情報をクライアントに格納し、必要に応じて複数のWebページを
高融点の使い方.
  • 情報はクライアント上に記憶する
  • .
  • ストレージ容量限定
  • セキュリティが劣る
  • クライアントブラウザで
  • を有効または無効にできます.
  • 度ごとにクッキー
  • を作成
    CookieにはPersistence CookieとSession Cookieがあります.
    Persistence Cookie
    ファイルとして作成し、Cookieを削除するかCookie設定値を終了すると終了します.
    また、最初の接続時にサーバに送信して、ログインとポップアップウィンドウの有無を制限することもできます.
    Session Cookie
    ブラウザメモリに作成し、ブラウザが終了したときに一緒に終了します.
    最初の接続時にサーバに送信されず、サイト接続時にセッション認証情報の維持に使用されます.

    サーブレット使用Cookie


    ファイル記憶方式
    //set
    Date d = new Date();
    //Cookie 객체를 생성한후 한글 정보를 인코딩해서 쿠키에 저장
    Cookie c = new Cookie("cookieTest", URLEncoder.encode("what프로그래밍입니다.", "utf-8"));
    //유효 기간을 설정
    c.setMaxAge(24*60*60);
    //생성된 쿠키 브라우저도 전송
    response.addCookie(c);
    //get
    Cookie[] allValues = request.getCookies();
    for(int i=0; i<allValues.length;i++){
     if(allValues[i].getName().equals("cookieTest")){
       out.println("<h2>Cookie 값 가져오기 : " + URLDecoder.decode(allValues[i].getValue(), "utf-8"));
       }
    }
    セッションCookie
    setMaxAgent(a)のa値を負に設定すると、セッションCookieが作成されます.
    //set
    Date d = new Date();
    //Cookie 객체를 생성한후 한글 정보를 인코딩해서 쿠키에 저장
    Cookie c = new Cookie("cookieTest", URLEncoder.encode("what프로그래밍입니다.", "utf-8"));
    //유효 기간을 설정
    c.setMaxAge(-1);
    //생성된 쿠키 브라우저도 전송
    response.addCookie(c);

    セッションを使用したWebページの連動


    Cookieは、Webページの情報をクライアントに格納し、情報の露出を容易にすることができる.
    セッションは、サーバのメモリに情報を作成して格納します.これらのセキュリティ保護が必要な情報のほとんどは、セッションを使用します.また、各ブラウザはセッションを作成します.すなわち、ユーザーごとにセッションを作成します.
  • 情報はサーバメモリに
  • 記憶する.
  • ブラウザのセッションバインド使用セッションCookie
  • クッキーよりも安全なガラス
  • サーバ、
  • セッション有効時間
  • クライアントが初めてサーバに接続されると、サーバはセッションオブジェクトを作成し、ブラウザにセッションオブジェクトのセッションIDを送信し、ブラウザはこのセッションIDをセッションCookieに保存します.
    再接続すると、サーバはこのセッションCookieを使用してセッションオブジェクトにアクセスし、ブラウザに対して操作を実行します.
    HttpSession session = request.getSession();
    out.println("세션 아이디 : " + session.getId() + "<br>");
    out.println("최초 세션 생성 시각  : " + new Date(session.getCreationTime()) + "<br>");
    out.println("최초 세션 접근 시각  : " + new Date(session.getLastAccessedTime()) + "<br>");
    out.println("세션 유효 시간  : " + session.getMaxInactiveInterval() + "<br>");
    if(session.isNew()){
    	out.print("새 새션이 만들어졌습니다.");
    }
    
    //세션 유효시간 설정
    session.setMaxInactiveInterval(5);
    //세션 강제 삭제
    session.invalidate();
    セッションCookieの確認方法

    Cookieが使用できない場合
    Cookieが使用できない場合は、encodeURL()メソッドを使用してセッション機能を有効にできます.
    String url = response.encodeURL("login");
    out.println("<a href="+url+">로그인 상태 확인 </a>");

    セッションログインの使用例

    //LoginServlet
    @WebServlet("/login")
    public class LoginServlet extends HttpServlet {
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doHandle(request, response);
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doHandle(request, response);
    	}
    
    	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");
    		PrintWriter out = response.getWriter();
    		String user_id = request.getParameter("user_id");
    		String user_pwd = request.getParameter("user_pwd");
    		//VO 객체 생성 및 속성에 값 설정 해주기
    		MemberVO memberVO = new MemberVO();
    		memberVO.setId(user_id);
    		memberVO.setPwd(user_pwd);
    		System.out.println("memberVO : "+ memberVO);
    		MemberDAO dao = new MemberDAO();
    		//memberVO를 dao에 전달
    		boolean result = dao.isExisted(memberVO);
    		if(result){
    			HttpSession session = request.getSession();
    			session.setAttribute("isLogon", true);
    			session.setAttribute("login.id", user_id);
    			session.setAttribute("login.pwd", user_pwd);
    			out.print("<html><body>");
    			out.print("안녕하세요  " + user_id + "님!!!<br>");
    			out.print("<a href='show'>회원정보 보기</a>");
    			out.print("</body></html>");
    		}else{
    			out.print("<html><body><center>회원 아이디가 틀립니다.");
    			out.print("<a href='login3.html'>다시 로그인 하기 </a>");
    			out.print("</body></html>");
    		}
    	}
    }
    
    //MemberDAO
    ....
    public boolean isExisted(MemberVO memberVO) {
    	boolean result = false;
    	String id = memberVO.getId();
    	String pwd = memberVO.getPwd();
    	try{
    		con = dataFactory.getConnection();
    		String query = "select decode(count(*),1,'true','fase') as result from t_member";
    		query += " where id=? and pwd=?";
    		pstmt = con.prepareStatement(query);
    		pstmt.setString(1, id);
    		pstmt.setString(2, pwd);
    		ResultSet rs = pstmt.executeQuery();
    		rs.next();
    		result = Boolean.parseBoolean(rs.getString("result"));
    		System.out.println("rsult =" + result);
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	return result;
    }