JavaEEベース(04):セッショントラッキング技術は、セッションとクッキーは、詳細な

この記事の出所:GitHubにはこちらをクリック・ || GitEEは・こちらをクリック

まず、セッショントラッキング

1、シーン記述

例えば、ショッピングサイトへのログは、成功した識別した後、これらの操作は、現在のユーザー情報でログインなど一括払いの下で動作サイトは、これらの操作の結果は、ユーザーがログインし、メイク協会できるように、共有する必要があります。

2、コンセプト紹介

相互作用は、複数の要求と応答を含むことができ、クライアントとサーバ間の対話セッションとして理解することができます。クライアントがブラウザのセッションが終了を閉じるまでJavaWebでは、クライアントからサーバーへの問題は、最初の要求を開始するには、セッションが始まりました。セッショントラッキング技術であるセッション要求内の共有データの複数。

二、詳細なクッキーの使用

1、クッキーさんのプロフィール

HTTPクッキーでは通常、一時的または恒久的に保存されたクライアントコンピュータの情報の利用者が、ユーザーのローカル端末セッションの追跡、通常は暗号化された上で保存されたデータのために、ユーザーIDを識別するために使用されます。構造はキーとその値です。サーバの応答をクライアントのブラウザに送信されます。そして、クライアントのブラウザがサーバーにアクセスするために再びクッキー、次の時間を節約し、その後クッキーをサーバーに送信しました。

クッキーは、サーバーによって作成され、その後、右応答することによって、キークライアントに送信されます。クライアントがクッキー、クッキーが保存されますとのソースをマークします。クライアントが行う場合は、サーバーへの要求は、サーバーがクライアントを識別することができるように、サーバーに送信されたリクエストに含まれるクッキーます。

2、クッキーの使用

  • クッキーを作成します。

JavaWebは、あなたは、クッキーベースのサーブレットを作成し、プロパティを設定することができます。

public class CookieServletOne extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        // 创建Cookie
        Cookie cookie = new Cookie("author","cicada");
        // 设置生命周期 1小时
        cookie.setMaxAge(60*60);
        response.addCookie(cookie) ;
        response.getWriter().print("Hello:Cookie");
    }
}

アクセス:http://localhost:6002/cookieServletOne

表示レスポンスヘッダ:

Response Header
Set-Cookie: author=cicada; Max-Age=3600;

このように、サーバは、クッキーがクライアントを持って作成されます。

  • クッキーの取得
public class CookieServletOne extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("doPost...");
        Cookie[] cookies = request.getCookies() ;
        for (Cookie cookie:cookies){
            System.out.println("Name:"+cookie.getName());
            System.out.println("Value:"+cookie.getValue());
        }
        response.setContentType("text/html;charset=utf-8");
        String userName = request.getParameter("userName") ;
        response.getWriter().print("Hello:"+userName);
    }
}

テストを通じて、コンソールName:author;Value:cicada出力:

  • 更新クッキー

サーバが重複したクッキーを送信し、元のクッキーを上書きした場合、更新は、対象とクッキーを指します。

public class CookieServletTwo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        // 创建Cookie
        Cookie cookie = new Cookie("author","smile");
        // 设置生命周期 2小时
        cookie.setMaxAge(60*60*2);
        response.addCookie(cookie) ;
        response.getWriter().print("Hello:Cookie");
    }
}

クッキーの結果は、テストの上記の方法によって得ることができます。

  • 削除クッキー

cookie.setMaxAge(0):ライフが0に等しいことはクッキーが無効である表し特別な値です。

public class CookieServletTwo extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        Cookie[] cookies = request.getCookies() ;
        for (Cookie cookie:cookies){
            if (cookie.getName().equals("author")){
                cookie.setMaxAge(0);
                response.addCookie(cookie);
            }
        }
        String userName = request.getParameter("userName") ;
        response.getWriter().print("Hello:"+userName);
    }
}

クッキーの再テスト法を取得するので、クッキーは、上記を削除することが見出されたnoです。

3、クッキー関連のAPI

  • setMaxAge()

秒で、クッキーの有効期限を設定します。デフォルトクッキーにより現在のセッションのみのセッションで有効になります。

  • getMaxAge()

クッキーの最大存続期間を取得します。

  • getName()

クッキーの名前を取得します。それが作成された後に名前を変更することはできません。

  • getValue()

クッキーに関連付けられた値を取得します。

  • setValue(String値)

クッキーに関連付けられた設定値値。同じ名前のセットが複数回カバーされることになります。

三、セッショントラッキング

1、セッションのはじめに

ユーザーがWebページのアプリケーション変数間のジャンプは、Sessionオブジェクトに格納されているセッション管理には、失われたが、常にユーザセッション全体で存在することはありません。サーブレットはHttSessionにセッションオブジェクト内の共有データへの必要性を保存することができます。四つのドメインオブジェクト:PageContextの、のServletRequest、HttpSessionの、のServletContext。

2、セッションの動作原理

  • 初めて

セッションを初めて使用するときは、サーバー側のセッションを作成するために、セッションはサーバー側に保存されている、データがセッションに格納され、セッションIDは、クッキーによってクライアントに送信され、ブラウザのみで存在するこのセッションで、手段、そのユーザー閉じるとブラウザは、その後、クッキーは失われます。

  • クライアントアクセス

クライアントアクセスサーバーが再び、リクエストがセッションIDを持って来ると、サーバは新しいセッションを作成することなく、セッションIDによって対応するセッションがあります。

  • 即時性

長い時間誰のためのセッションを使用した場合のTomcatでこの設定は$ {} CATALANAにこの設定を見つけることができます/conf/web.xml長い30分のとき、サーバはまたweb.xmlのことができ、セッションを削除しますこの構成をカバーで!

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

3、関連するAPIの使用法

  • getSesssion()

現在のセッションは、セッションオブジェクトとリターンを作成し、存在しない場合、現在のセッションがすでに少ないダイレクトリターンセッションオブジェクトが存在します。

  • getAttribute(文字列名)

指定された名前のオブジェクトそのセッションのセッションを返します。

  • getId()

セッションのセッション識別子に割り当てられた一意の文字列。

  • setAttributeメソッド(文字列名、オブジェクト値)

セッションのセッションにオブジェクトをバインドする指定した名前を持ちます。

  • removeAttribute(文字列名)

オブジェクトの名前は、セッションのセッションから削除されて指定します。

4.アプリケーション

ウェブサイトでは、それが目に見える機能は、最後のログイン時間であり、達成することが非常に簡単にすることができ、セッションに基づいていることが多いです。

public class SessionServletOne extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        HttpSession session = request.getSession(true) ;
        Date createTime = new Date(session.getCreationTime());
        Date lastAccessTime = new Date(session.getLastAccessedTime());
        session.setAttribute("author","cicada");
        response.getWriter().print(
                "SessionId:" + session.getId() + "<br/>"+
                "User Author:" + session.getAttribute("author")+"<br/>"+
                "Create Time:" + dateFormat.format(createTime)+"<br/>"+
                "Last Access Time:"+dateFormat.format(lastAccessTime));
    }
}

アクセスhttp://localhost:6002/sessionServletOne

印刷されたページ、効果を確認するために多くの訪問。

SessionId:40C12C367CBFA7469D57E72C5C091300
User Author:cicada
Create Time:2019-12-14 15:34:10
Last Access Time:2019-12-14 15:35:13

第四に、送信元アドレス

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

おすすめ

転載: www.cnblogs.com/cicada-smile/p/12047240.html