クッキーとセッションの実現原理


1.会話技術

それがあるのでCookie説明する前に、会話技術の種類に属しているCookieSession、のは、会話の技術が何であるかを見てみましょう。

会话つまり说话、今日は路上で張さんに出くわしました。二人は長年会っていない古くからの友人なので、一人がいなくなるまでお互いに言い合って、今度は会話が以上。

したがって、同じこと会话が当てはまります。ブラウザとサーバーが閉じられるまで、ブラウザとサーバーの間で複数の要求と応答が発生する可能性があります会话今回は終了します。このようなプロセスは次のように呼ばれます。1回のセッション

したがって、このセッションでデータ情報を保存する方法は大きな問題です。CookieそしてSession、このセッションのデータ情報を保存するのに役立ちます。

Cookieクライアント側のセッションテクノロジの場合、データ情報はクライアント側(ブラウザ)に保存されます

Sessionサーバー側の会話テクノロジーの場合、データ情報はサーバーに保存されます

二、クッキー

ケースを通してCookie実現原理を学ぶには、2つ定義しますHttpServlet

最初のものは送信に使用されますCookie

@WebServlet("/cookieDemo1")
public class CookieDemo1 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //1. 创建Cookie对象
        Cookie cookie = new Cookie("msg","hello");
        //2. 发送Cookie
        response.addCookie(cookie);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

2番目のものは取得するために使用されますCookie

@WebServlet("/cookieDemo2")
public class CookieDemo2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //3. 获取Cookie,拿到数据
        Cookie[] cookies = request.getCookies();
        //如果cookies不为空,就拿到cookies里面所有的value
        if (cookies != null) {
    
    
            for (Cookie cookie : cookies) {
    
    
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println(name + " : " + value);
            }
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

サーバーを実行し、最初にアクセスしてcookieDemo1、をクリックF12し、ネットワークを選択します。最初にアクセスしたときcookieDemo1に、サーバーがブラウザにcookie情報を応答したことがわかります。
ここに画像の説明を挿入

次に、にアクセスするcookieDemo2と、リクエストヘッダーがcookieサーバーに情報を伝達します
ここに画像の説明を挿入

上記のテキストは理解しにくいかもしれませんが、下の絵を描くことで明確になります。
ここに画像の説明を挿入

最初の訪問cookieDemo1では、サーバーは応答を提供して応答ヘッダーを設定しset-cookie : msg=hello、ブラウザーはcookie情報を保存します。2回目の訪問cookieDemo2では、ブラウザーは保存された情報を要求ヘッダーにカプセル化してサーバーに送信します。

3、セッション

始める前にSession、1つのポイントを説明しましょうSessionそれはそれに依存しますCookieとりあえず脇に置いておきましょう为什么。ケースを通して、見てみましょう。

2つ作成しますHttpServlet

1つ目は、情報を設定するためのものです。

@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //1. 获取HttpSession对象
        HttpSession session = request.getSession();
        //2. 存储数据
        session.setAttribute("msg","hello");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

2つ目は、Session情報を取得するために使用されます。

@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //1. 获取HttpSession对象
        HttpSession session = request.getSession();
        //2. 获取数据
        Object msg = session.getAttribute("msg");
        System.out.println(msg);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

サーバーを実行して最初のサーバーにアクセスします。最初のアクセスでは、応答ヘッダーにメッセージが含まれていることがわかりCookieます。このcookieメッセージは次のとおりです。

JSESSIONID = 67680D84ACA2B7844FCCF3F4FE89E84B

痛い、これは何ですか?急いではいけません。読み続けてください
ここに画像の説明を挿入
。2回目の訪問で、今回は応答ヘッダーにも次のようなcookieメッセージが含まれていることがわかりました

JSESSIONID = 67680D84ACA2B7844FCCF3F4FE89E84B

上記と同じ!
ここに画像の説明を挿入

次は、大きな秘密リンクを入力して、Cookie同じことが、最初の絵を描く:
ここに画像の説明を挿入
ので、Sessionオブジェクトのデータはサーバ側で保存され、その後、どのようにするだけ、そこにあるSessionものと同じものがされたセッションで複数回取得します大きな問題がある。この問題を解決するために、誰ので、Session目標を設定id、およびにより、ブラウザそう介してのみ、ブラウザに送信見つけることが、それは準備をする私たちがしているオブジェクトを。だから:それは依存します。CookieididSessionSessionCookie

おすすめ

転載: blog.csdn.net/lesileqin/article/details/112663817