3.cookie&session
Cookie&Session
1 Cookie
1 Cookieとは? Cookieはservletがブラウザに送信してキー値ペアを保存する技術である. Cookieの各サイズは4 kbに限定される. クライアントにCookieがあると、リクエストごとにサーバに送信されます.
2クッキーの基本操作
1 Cookieオブジェクトの作成方法
1)図解)コード実装:
2サービス側がCookieを取得する方法
コード実装:
3 Cookieの値を変更する方法
シナリオ1:修正する名前のCookieオブジェクトを作成します. は、コンストラクタにおいて、同時に新しいCookie値を付与する. responseを呼び出す.addCookie(cookie)はクライアントにcookieを保存させる.
シナリオ2:は、修正が必要なCookieオブジェクトを巡回して見つけます. setValueメソッドを呼び出して新しいCookie値を付与する. responseを呼び出す.addCookie()は、クライアントに変更の保存を通知します.
注意:このスキームはCookieの値を変更し、スペース、角カッコ、丸カッコ、等号、カンマなどを含んではいけません.これらの記号を使用する必要がある場合は、base 64符号化を先に行う必要があります.
3 Cookieのライフサイクル
setMaxAge();クッキーの最大生存時間を秒単位で設定します.正数:指定した秒数後に削除します. 負数:ブラウザが閉じるとクッキーが削除されます(デフォルト-1). 0:すぐにクッキーを削除することを示す
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ユーザー名なしログインの実装
フロントエンドコード実装:
ユーザー名:
パスワード:
バックグラウンドコード実装:
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を使用して、個々のセッションの時間を設定できます.
5ブラウザとセッションの関連技術の内幕
広がる
1クッキーの違い
httpの無状態の特性を解決するためだ.
違い: cookieはクライアントに保存され、sessionはサーバ側に保存されます. デフォルト:クッキーはブラウザが閉じたときに破棄され、セッションのデフォルトのライフタイムは30分です.
2 Base 64エンコーディング
1 Cookie
1 Cookieとは?
2クッキーの基本操作
1 Cookieオブジェクトの作成方法
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:
protected void updateCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie3 = new Cookie("key1","valueReplace");
response.addCookie(cookie3);
response.getWriter().write("cookie ");
}
シナリオ2:
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();クッキーの最大生存時間を秒単位で設定します.
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プロパティは、要求されたアドレスによって有効なフィルタリングを行います.
5ユーザー名なしログインの実装
フロントエンドコード実装:
ユーザー名:
パスワード:
バックグラウンドコード実装:
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セッションとは?
注意:クッキーはクライアントで、セッションはサーバ側です.
2セッションの作成と取得方法
注:セッションごとにSessionIdがあり、id値は一意です.getId()を使用してセッションのidを取得します.
3セッションドメインオブジェクト
4 Sessionのライフサイクル
注意:Tomcatサーバのプロファイルweb.xmlには、現在のTomcatサーバの下にあるすべてのSessionタイムアウト構成のデフォルト時間が30分であることを示すデフォルト設定があります.
30
私たちは自分のwebを通じてxmlファイルを使用して、すべてのセッションのデフォルト時間を変更します.上記のAPIを使用して、個々のセッションの時間を設定できます.
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ブラウザとセッションの関連技術の内幕
広がる
1クッキーの違い
httpの無状態の特性を解決するためだ.
違い:
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);
}
}