検索
ホームページJava&#&チュートリアルJava で Cookie とセッション テクノロジを使用する方法

    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 サイトの他の関連記事を参照してください。

    声明
    この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

    この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

    適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

    この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

    カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

    この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

    キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

    この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

    Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

    Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    mPDF

    mPDF

    mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Dreamweaver Mac版

    Dreamweaver Mac版

    ビジュアル Web 開発ツール