1.会話技術
それがあるのでCookie
説明する前に、会話技術の種類に属しているCookie
とSession
、のは、会話の技術が何であるかを見てみましょう。
会话
つまり说话
、今日は路上で張さんに出くわしました。二人は長年会っていない古くからの友人なので、一人がいなくなるまでお互いに言い合って、今度は会話が以上。
したがって、同じこと会话
が当てはまります。ブラウザとサーバーが閉じられるまで、ブラウザとサーバーの間で複数の要求と応答が発生する可能性があります会话
。今回は終了します。このようなプロセスは次のように呼ばれます。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
、およびにより、ブラウザそう介してのみ、ブラウザに送信見つけることが、それは準備をする私たちがしているオブジェクトを。だから:それは依存します。Cookie
id
id
Session
Session
Cookie