クッキーについて話しましょう


Why Cookie???
Httpはアプリケーション層のネットワーク転送プロトコルであることはよく知られていますが、彼は無状態のプロトコルであり、クライアントやサーバの状態を保存できないので、クッキーが誕生し、クッキーを使用して状態を保存します.Cookieの動作メカニズムは,ユーザ識別および状態管理である.
What Cookie???
1 Cookieサービスの最初のフィールド
ヘッダフィールド名
説明
ヘッダタイプ
Set-Cookie
状態管理開始に使用するCookie情報
応答ヘッダフィールド
Cookie
サーバが受信したCookie情報
要求ヘッダフィールド
1.1 Set-Cookieフィールドのいくつかの重要な属性
expires:Cookieの有効期間(不明な場合はブラウザが閉じるまでデフォルト)
Path:サーバー上のファイルディレクトリをCookieの適用対象とします(デフォルトでドキュメントが存在するディレクトリは指定しません)
domain:Cookieの適用対象となるドメイン名(指定せず、デフォルトではCookieを作成するサーバのドメイン名)は、example.comを指定すると、example.comのほか、www.example.comやwww.exw 2.example.comなどでCookieを送信することができます.
Secure:WEBページがHTTPSセキュリティ接続時のみCookieを送信できるように制限する
Set-Cookie:name=value;secure

HttpOnly:この属性は彼の拡張属性で、彼はJSスクリプトにCookieを得ることができません.クロスステーションスクリプト攻撃によるCookieの情報盗みを防止することを目的としている
Set-Cookie:name=value;HttpOnly

How Cookie???
1、どのようにget/setCookieを取るか——HttpServertRequestを使う.HttpServertRequestオブジェクトはクライアントの要求を表し、クライアントがHTTPプロトコルを通じてサーバーにアクセスする時、HTTP要求ヘッダの中のすべての情報はこのオブジェクトにカプセル化されるので、このオブジェクトを通じてCookieを得ることができる
2、setCookie
    private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
        try {
            if (cookieValue == null) {
                cookieValue = "";
            } else if (isEncode) {
                cookieValue = URLEncoder.encode(cookieValue, "utf-8");
            }
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage > 0)
                cookie.setMaxAge(cookieMaxage);
            if (null != request) {//      cookie
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) {
                    cookie.setDomain(domainName);
                }
            }
            cookie.setPath("/");
            response.addCookie(cookie);
        } catch (Exception e) {
             e.printStackTrace();
        }
    }

3、getCookie
 public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
        Cookie[] cookieList = request.getCookies();
        if (cookieList == null || cookieName == null) {
            return null;
        }
        String retValue = null;
        try {
            for (int i = 0; i < cookieList.length; i++) {
                if (cookieList[i].getName().equals(cookieName)) {
                    if (isDecoder) {
                        retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
                    } else {
                        retValue = cookieList[i].getValue();
                    }
                    break;
                }
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return retValue;
    }