7、JavaWeb-セッション(クッキー、セッション)

26244 ワード

会話の文字通り:一回のコミュニケーションや会話
Webでは、セッションはブラウザからWebサイトを開くことを表し、このサイトで何を操作してもブラウザを閉じるまで、このプロセスをセッションと呼びます.
セッションの終了方法:
  • クライアントは
  • を閉じる.
  • サービス側は
  • を破棄した.
    セッションを処理する理由:
    ユーザーが何度ブラウザを閉じても、このセッションは存在します.
    比喩:
    あなたは昨日教室に来ました.今日はあなたが昨日教室に来たことを知る必要があります.
  • マークを残して
  • に来たことを知らせてください
  • ここに来たと教えてくれました.私はあなたが来たことを記録する必要があります.

  • あなた:クライアント私:サーバー
    Javawebでは、この2つの異なるエンドに対して、2つの小さなメカニズムが誕生しています.
    クッキー:クライアントに何かを残して、クライアントが今度持ってきて、私はあなたが来たことを知っています.
    例えば、私の店はとても大きいですが、どうやってあなたが来たことを証明しますか?
    会員になってください.VIPカードをあげます.今度カードを持ってきてください.あなたが来たことを知っています.
    Session:サーバー側に登録したことがあります.
    例えば、理髪店に行ってください.どうやって来たの?
    理髪店は会員を集めて、彼のノートにあなたのニュースを記録して、今度直接大名に報告すればいいです.
    Cookie
    コンストラクタ:
    Cookie cookie = new Cookie(String name,String value);
    Cookie cookie = new Cookie(String name,String value);
    Cookie cookie = new Cookie(String name,String value);
    

    サーバはクッキーに応答してクライアントに
    Response.addCookie(Cookie);
    Response.addCookie(Cookie);
    Response.addCookie(Cookie);
    

    サービスユーザーからのリクエストにクッキーがあるかどうかを確認
    Cookie[] cookies = Request.getCookie();
    //    cookie         
    //  cookies    ,      
    Cookie.getName();
    Cookie.getValue();
    

    クッキーはユーザーが来たかどうかをテストします
    package com.westos.serlvet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class CookieTest extends HttpServlet {
    
        boolean flag = false;
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //      :
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            //          Cookie
            //       ,      cookie
            Cookie[] cookies = request.getCookies();
            System.out.println("cookie:"+cookies);
    
    
            if (flag){//  flag  ,  
                if (cookies!=null){//  cookie
                    for (int i = 0; i < cookies.length ; i++) {
                        Cookie cookie = cookies[i];
                        if (cookie.getName().equals("lastLoginTime")){
                            response.getWriter().println("         :"+cookie.getValue());
                            System.out.println("   cookie");
                        }
                    }
                }
            }else { //  flag  ,   
                response.getWriter().println("      ,       ");
                System.out.println("      cookie");
            }
    
            //    cookie
            Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
    
            //  cookie      //cookie.setMaxAge();
            //   cookie     
            response.addCookie(cookie);
    
            //response.addCookie(new Cookie("lastLoginTime",System.currentTimeMillis()+""));
            flag = true;
    
    
        }
    }
    
    

    Session
    クライアントがサーバに接続すると、サーバは自動的にセッションを生成します.
    1つの接続は1つのセッションに対応し、セッションは1つのセッションで情報を伝達することができる.
    setAttributeで値を設定します.
    getAttributeで値を取得します.
    サーバー側が制御し、サーバーが再起動すると情報が失われます!
    package com.westos.serlvet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    
    public class SessionTest extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //      :
            req.setCharacterEncoding("UTF-8");
            resp.setCharacterEncoding("UTF-8");
            //Session        ,    session
    
            //HttpSession    sessioin  
            HttpSession session = req.getSession();
    
            //  sessionID,    ,  seesionID;
            String id = session.getId();
            resp.getWriter().println("   sessionId:
    "
    +id); String name = "qinjiang"; // session ; session.setAttribute("name",name); resp.getWriter().println(" :"+name); } }
    package com.westos.serlvet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    
    //  session    
    public class SessionTest2 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //      :
            req.setCharacterEncoding("UTF-8");
            resp.setCharacterEncoding("UTF-8");
    
            //  
            HttpSession session = req.getSession();
            System.out.println("   SessionID:"+session.getId());
    
    
            String name = (String) session.getAttribute("name");
            resp.getWriter().println("   session     "+name);
    
            //Servlet  <  Seesion  <  WebContext
    
        }
    }
    

    セッションログアウト方法1:
    session.invalidate();//        
    

    セッションログアウト方法2:
    
    <session-config>
        <session-timeout>1session-timeout>
    session-config>