Java で Cookie とセッション テクノロジを使用する方法

王林
リリース: 2023-04-23 18:55:07
転載
1259 人が閲覧しました

    http ステートレス プロトコルの解決策:

    HTTP はステートレス プロトコルです。ステートレス プロトコルでは、サーバーが複数のリクエストにわたって各ユーザーに関する情報や状態を保持する必要はありません。

    ただし、一部の Web アプリケーションでは、たとえば、Web サーバーが Web ページのコンテンツをユーザーに合わせてカスタマイズする必要がある場合など、あるページから別のページへのユーザーの進行状況を追跡する必要がある場合があります。このような状況に対する解決策には、

    • ##HTTP Cookie の使用が含まれます。

    • サーバー側セッション。

    • 隠し変数 (現在のページにフォームが含まれている場合)

    • URI エンコードされたパラメーター (/index など) の URL 書き換えを使用します。 php? session_id=some_unique_session_code.

    プロトコルをステートレスにする理由は、サーバーが複数のリクエストのステータスを追跡する必要がないためであり、追跡したくてもできないわけではありません。これにより、クライアントとサーバー間の契約が簡素化され、多くの場合 (CDN 経由で静的データを提供する場合など)、転送する必要のあるデータの量が最小限に抑えられます。サーバーがクライアント アクセスの状態を維持する必要がある場合、リクエストの作成と応答の構造はより複雑になります。実際、モデルのシンプルさはその最大の特徴の 1 つです。

    1. Cookie

    1. cookie の概念

    Cookie は、サーバー上で作成および維持され、ブラウザ側に保存されるセッション テクノロジです

    Cookie アプリケーションのシナリオ: ユーザー名とパスワードを記憶し、7 日間ログインする必要はありません

    2、Cookie の作成

    //创建cookie
    Cookie cookie = new Cookie("username", "admin");
    //将cookie响应到浏览器
    response.addCookie(cookie);
    ログイン後にコピー

    メッセージ内での Cookie の表現方法:

    If in サーバーに Cookie を作成し、ブラウザに応答します。このとき、 Set-Cookie: username=admin

    という応答メッセージが表示されます。以降、ブラウザがサーバーにリクエストを送信するたびに、この Cookie が含まれます。リクエスト メッセージに表示されます: Cookie: username=admin

    ブラウザへの Cookie に応答した後、Cookie はブラウザの実行メモリに保存されます。ブラウザを閉じると、ブラウザの実行メモリが解放されるため、Cookie がクリアされます。したがって、セッションのデフォルトの有効時間は、ブラウザを開いてから閉じるまでです。

    3. Cookie を取得します

    //获取浏览器发送请求所携带的所有cookie
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName() + "," + cookie.getValue());
        }
    }
    ログイン後にコピー

    4. Cookie を変更します

    a> Cookie はキーと値の形式のデータであるため、同じキーと異なる値を持つ Cookie を作成するだけで、ブラウザーに応答して、対応する Cookie の値が上書きされます

    b>Use cookie.setValue()

    /*Cookie cookie = new Cookie("username", "root");
    response.addCookie(cookie);*/
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        for (Cookie cookie : cookies) {
            if(cookie.getName().equals("username")){
                cookie.setValue("zhangsan");
                response.addCookie(cookie);
            }
        }
    }
    ログイン後にコピー

    5. Cookie の有効期間を設定します

    Cookie がブラウザに応答した後、Cookie はブラウザの実行メモリに保存されます。ブラウザが閉じられると、ブラウザの実行メモリが解放され、Cookie がクリアされます。したがって、セッションのデフォルトの有効時間は、ブラウザを開いてからブラウザを閉じるまでです。

    ただし、Cookie.setMaxAge()

    を使用して Cookie の有効時間を設定できます。

    a>設定された有効期間が負の整数の場合は効果がありません、つまり、有効期間はブラウザを開いてからブラウザを閉じるまでです。有効時間が 0 の場合、Cookie はすぐに削除されます

    c> 設定された有効時間が正の整数の場合

    有効時間が 1 セッションに満たない場合、 Cookie は、指定された時間に達すると、実行中のメモリから自動的に削除されます。

    有効時間が 1 セッションより長い場合、ブラウザを閉じるときに、Cookie 内のデータがディスクに保存されます。ブラウザが再度開かれると、ディスク内のデータが実行中のメモリに再ロードされます

    #6. Cookie の有効なパスを設定します

    #cookie. setPath();

    Cookie が作成されてブラウザに応答すると、有効なパスを持つ Cookie が設定され、Cookie は指定されたパスにアクセスする場合にのみ保持されます

    2. session

    1.セッションの概念

    セッションは、サーバー内で作成および維持され、サーバー側に保存されるセッション テクノロジです。

    セッションのアプリケーション シナリオ: ユーザーのログイン ステータスを記録します

    2. セッション取得時のパケットの変化を観察する

    request.getSession() を通じてセッション オブジェクトを取得する

    このセッションで初めて request.getSession( にアクセスしたとき)セッション オブジェクトを取得すると、キー JSESSIONID を持つ Cookie が応答メッセージに表示されます。

    リクエストがブラウザを通じてサーバーに送信されるたびに、サーバーが停止している場合でも、この JSESSIONID を持つ Cookie が送信されます。 accessed

    # この場合、request.getSession() を使用してセッション オブジェクトを再度取得します。リクエスト メッセージに JSESSIONID Cookie が存在する限り、この Cookie は応答メッセージには表示されなくなります

    3. セッションの原則

    質問:

    セッションの原則とは何ですか?

    セッションとクッキーの関係は何ですか?

    なぜ 1 つのセッションで同じセッションが取得されるのですか?

    回答:

    request.getSession()でセッションを取得すると、リクエストメッセージにキーJSESSIONIDを持つCookieが取得されます。 JSESSIONID の cookie は、現在のセッションが開始されたばかりで、現在のセッションでセッション オブジェクトを取得するのは初めてであることを示します。このとき、サーバー内にセッション オブジェクトが作成され、キーが JSESSIONID、値が UUID のランダムなシーケンスを持つ Cookie が作成され、作成されたセッション オブジェクトはサーバーが管理するマップ コレクションに保存されます。 UUID のランダム シーケンスをキーとして使用し、セッション オブジェクトを値として使用し、最後に JSESSIONID の Cookie をブラウザーに応答します。

    若请求报文中存在键为JSESSIONID的cookie,此时获取该cookie的值,即UUID随机序列,以UUID随机序列为键,从服务器所维护的map集合中就可以获取唯一的session对象

    4、session的常用方法

    4.1、session存在域对象的数据

    void setAttribute(String name, Object value);

    Object getAttribute(String name);

    void removeAttribute(String name);

    4.2、设置session的时效

    session的时效指在指定时间内,若没有对session进行任何的操作,此时session会自动失效

    a>通过web.xml设置,单位是分钟

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    ログイン後にコピー

    b>通过session.setMaxInactiveInterval()设置,单位是秒

    session.setMaxInactiveInterval(1800);
    ログイン後にコピー
    4.3、强制使session失效

    session.invalidate()

    5、session的钝化和活化

    session的钝化指服务器关闭,但是浏览器没有关闭,此时session中的数据会被序列化到磁盘上

    session的活化指服务器启动,并且浏览器仍然没有关闭,此时会将序列化到磁盘上的数据重新加载到内存中

    注意:若session中存储的是实体类对象,此时若要钝化,则该实体类和该实体类的成员变量也都要实现序列化的接口

    三、cookie和session的区别

    1、cookie存储在浏览器端,session存储在服务器端,因此cookie相对而言不安全

    2、cookie只能存储字符串类型的键值对,session可以存储任意类型的数据,因此若存储相同的数据,cookie可能会产生大量的cookie

    3、由于每次浏览器发送请求都会携带cookie,若有大量的cookie,就会造成网络负担

    以上がJava で Cookie とセッション テクノロジを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:yisu.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート