3.cookie&session


Cookie&Session
1 Cookie
1 Cookieとは?
  • Cookieはservletがブラウザに送信してキー値ペアを保存する技術である.
  • Cookieの各サイズは4 kbに限定される.
  • クライアントにCookieがあると、リクエストごとにサーバに送信されます.

  • 2クッキーの基本操作
    1 Cookieオブジェクトの作成方法
    1)図解3.cookie&session_第1张图片)コード実装:
    protected void createCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie1 = new Cookie("key1","value1");
        response.addCookie(cookie1);
        Cookie cookie2 = new Cookie("key2","value2");
        response.addCookie(cookie2);
        Cookie cookie3 = new Cookie("key3","value3");
        response.addCookie(cookie3);
        response.getWriter().write("cookie    ");
    }
    

    2サービス側がCookieを取得する方法
    コード実装:
    //  cookie
    protected void getCookies(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        Cookie key1 = CookieUtils.findCookie("key1", cookies);
        System.out.println(key1);
      	response.getWriter().write(key1.getName()+"=="+key1.getValue()+"
    "
    ); } //CookieUtils public class CookieUtils { public static Cookie findCookie(String name,Cookie[] cookies){ if (name==null||cookies==null||cookies.length==0){ return null; } for (Cookie cookie : cookies) { if (name.equals(cookie.getName())){ return cookie; } } return null; } }

    3 Cookieの値を変更する方法
    シナリオ1:
  • 修正する名前のCookieオブジェクトを作成します.
  • は、コンストラクタにおいて、同時に新しいCookie値を付与する.
  • responseを呼び出す.addCookie(cookie)はクライアントにcookieを保存させる.
  • protected void updateCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie3 = new Cookie("key1","valueReplace");
        response.addCookie(cookie3);
        response.getWriter().write("cookie    ");
    }
    

    シナリオ2:
  • は、修正が必要なCookieオブジェクトを巡回して見つけます.
  • setValueメソッドを呼び出して新しいCookie値を付与する.
  • responseを呼び出す.addCookie()は、クライアントに変更の保存を通知します.
  • protected void updateCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        Cookie key1 = CookieUtils.findCookie("key1", cookies);
        if (key1!=null){
            key1.setValue("replaceValue");
            response.addCookie(key1);
        }
    }
    

    注意:このスキームはCookieの値を変更し、スペース、角カッコ、丸カッコ、等号、カンマなどを含んではいけません.これらの記号を使用する必要がある場合は、base 64符号化を先に行う必要があります.
    3 Cookieのライフサイクル
    setMaxAge();クッキーの最大生存時間を秒単位で設定します.
  • 正数:指定した秒数後に削除します.
  • 負数:ブラウザが閉じるとクッキーが削除されます(デフォルト-1).
  • 0:すぐにクッキーを削除することを示す
  • protected void defaultLife(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("keyn","valuen");
        //      :        
        cookie.setMaxAge(-1);
        response.addCookie(cookie);
    }
    protected void zeroLife(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        Cookie key1 = CookieUtils.findCookie("key1", cookies);
        //      :    
        key1.setMaxAge(0);
        response.addCookie(key1);
    }
    protected void timeLife(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        Cookie key1 = CookieUtils.findCookie("key2", cookies);
        //      :    
        key1.setMaxAge(60*60);
        response.addCookie(key1);
    }
    

    4 Cookie有効パスPathの設定
    役割:どのCookieがサーバに送信できるか、送信しないかを効率的にフィルタできます.pathプロパティは、要求されたアドレスによって有効なフィルタリングを行います.
  • CookieA path=/エンジニアリングパス
  • CookieB path=/エンジニアリングパス/abc
  • リクエストアドレスは次のとおりです.
  • http://ip:port/エンジニアリングパス/a.html
  • CookieA送信
  • CookieBは
  • を送信しない
  • http://ip:port/エンジニアリングパス/abc/a.html
  • CookieA送信
  • CookieB送信
  • 注:クッキーを設定しない場合は、デフォルトのパスはプロジェクトの下にあります.
    5ユーザー名なしログインの実装
    3.cookie&session_第2张图片フロントエンドコード実装:
    ユーザー名:
    パスワード:
    バックグラウンドコード実装:
    
    protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if ("admin".equals(username)&&"admin".equals(password)){
            Cookie username1 = new Cookie("username", username);
            username1.setMaxAge(60*60*24*7);
            response.addCookie(username1);
            Cookie password1 = new Cookie("password", password);
            password1.setMaxAge(60*60*24*7);
            response.addCookie(password1);
            System.out.println("    !!!");
        }else {
            System.out.println("    !!!");
        }
    }
    
    

    2.セッション
    1セッションとは?
  • sessionはインタフェース(HttpSession)である.
  • sessionは、クライアントとサーバの関連付けを維持するためのセッションです.
  • 各クライアントには、独自のセッションがあります.
  • Sessionユーザー登録後の情報を保存するためによく使用されます.

  • 注意:クッキーはクライアントで、セッションはサーバ側です.
    2セッションの作成と取得方法
  • Session requestを取得および作成する.getSession():最初の呼び出しは作成で、その後は取得です.現在のセッションが新しく作成されたか以前に作成されたかを知るためにisNew()を用いて判断する.

  • 注:セッションごとにSessionIdがあり、id値は一意です.getId()を使用してセッションのidを取得します.
    3セッションドメインオブジェクト
  • request.getSession().setAttribute(“key1”,“value1”);
  • Object key1 = request.getSession().getAttribute(“key1”);
  • response.getWriter().write(「Sessionから取得した値は:」+key 1);

  • 4 Sessionのライフサイクル
  • public void setMaxInactiveInterval(int interval):セッションのタイムアウト時間(秒単位)を設定し、指定した時間を超えるとセッションは破棄されます.
  • 値が正数の場合、セッションのタイムアウト時間長を設定します.
  • の値は負数で、タイムアウトしない(極めて少ない)ことを示します.

  • public int getMaxInactiveInterval():セッション取得のタイムアウト時間
  • public void invalidate():現在のセッションを無効にし、バインドを解除します.

  • 注意:Tomcatサーバのプロファイルweb.xmlには、現在のTomcatサーバの下にあるすべてのSessionタイムアウト構成のデフォルト時間が30分であることを示すデフォルト設定があります.
    30
    私たちは自分のwebを通じてxmlファイルを使用して、すべてのセッションのデフォルト時間を変更します.上記のAPIを使用して、個々のセッションの時間を設定できます.3.cookie&session_第3张图片
    protected void deleteNow(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        //session    
        session.invalidate();
        response.getWriter().write("  session    :"+session.getMaxInactiveInterval());
    }
    protected void life3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        //   session3    
        session.setMaxInactiveInterval(3);
        //session    
        session.invalidate();
        response.getWriter().write("  session     3s   :"+session.getMaxInactiveInterval());
    }
    protected void defaultLife(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        //1800s==30  
        response.getWriter().write("        :"+session.getMaxInactiveInterval());
    }
    

    5ブラウザとセッションの関連技術の内幕
    3.cookie&session_第4张图片
    広がる
    1クッキーの違い
    httpの無状態の特性を解決するためだ.
    違い:
  • cookieはクライアントに保存され、sessionはサーバ側に保存されます.
  • デフォルト:クッキーはブラウザが閉じたときに破棄され、セッションのデフォルトのライフタイムは30分です.

  • 2 Base 64エンコーディング
    package com.atguigu.test;
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    import java.io.IOException;
    
    public class Base64Test {
        public static void main(String[] args) throws IOException {
            String content="  base64     ";
            //    Base64    
            BASE64Encoder base64Encoder = new BASE64Encoder();
            //  base64     
            String encode = base64Encoder.encode(content.getBytes());
            //6L+Z5pivYmFzZTY057yW56CB55qE5YaF5a65
            System.out.println("    :"+encode);
            //  base64   
            BASE64Decoder base64Decoder = new BASE64Decoder();
            //      
            byte[] bytes = base64Decoder.decodeBuffer(encode);
            String decode = new String(bytes,"utf-8");
            System.out.println("    :"+decode);
        }
    }