クライアントがサーバーへの接続を開いてリクエストを作成し、サーバーがクライアントのリクエストに応答するまでのプロセス全体をセッションと呼びます。
推奨コース: Java チュートリアル 。
ブラウザとサーバー間の通信は HTTP プロトコルを介して行われますが、HTTP プロトコルは「ステートレス」プロトコルであり、顧客情報を保存することはできません。応答が完了すると接続が切断され、次のリクエストを再接続する必要がある ユーザーが同じ Web サイト上の複数のページを切り替えたときに、それが同じ顧客であるかどうかを判断することは不可能ですが、セッション トラッキング テクノロジーはこの要件を実現できます。 。
Cookie
サーバーがリクエストに応答すると、応答情報を通じて一部のデータを「キーと値」ペアの形式でクライアントに保存できます。ブラウザが同じアプリケーションに再度アクセスすると、セッション ID を持つ元の Cookie がリクエスト情報を通じてサーバーに送信されます。ネットワーク サーバーは、一意のセッション ID を識別することで各クライアントを表し、それによってこのクライアントのリクエストの次のステップを識別します。
Cookie は組み込みオブジェクトではないため、Cookie のインスタンスを自分で作成する必要があります。これは、サーバーによってクライアントに書き込まれるテキスト情報です。この情報は変更できるため、通常、Cookie には機密性のない情報が保存されます。クライアントがサーバーに再度リクエストすると、Cookie は次の形式でサーバーに送信されます。リクエストヘッダーの形式であり、この時点でサーバーは誰がアクセスしているかを識別できます。
セッション追跡に使用される Cookie はセッション Cookie と呼ばれます。サーブレット仕様におけるセッション追跡の Cookie 名は、ブラウザのメモリに保存される JSESSIONID である必要があります。
Cookie はユーザーのセッション状態を維持するために使用できますが、Cookie 情報はクライアントに保存されるため、セキュリティ上の大きなリスクがあり、一般的なブラウザでは Cookie の数とデータ サイズに厳しい制限があります。 Web アプリケーションでは、通常、セッション状態は HttpSession オブジェクトを通じて維持されます。
Cookie cookie = new Cookie("键", "值"); //创建cookie cookie.setMaxAge(60*60*24); //设置cookie的有效期 cookie.setPath("/"); //设置cookie的有效范围(路径) response.addCookie(cookie); //将cookie写入到客户端
Session
Session はサーバー側に保存されるため、より安全です。各ユーザーには異なるセッションがあり、ユーザー間で共有することはできません。
セッションは Cookie に依存しています。Cookie が無効になっている場合、セッションも無効になります。
セッション テクノロジはサーバー側のソリューションであり、サーバーを通じて状態を維持します。 Java では、HttpServletRequest の getSession メソッドを呼び出すことによって作成されます (パラメーターとして true を使用)。セッションを作成するとき、サーバーはセッションに一意のセッション ID を生成し、このセッション ID は後続のリクエストで作成されたセッションを取り戻すために使用されます。セッションの作成後、セッション関連のメソッドを呼び出すことができ、コンテンツが追加されます。セッションに送信すると、これらのコンテンツはサーバーにのみ保存され、セッション ID のみがクライアントに送信されます。クライアントが再度リクエストを送信すると、このセッション ID が取得され、サーバーは対応するセッションをベースに検索します。セッション ID を確認して再度使用してください。このようなプロセスを形式化することで、ユーザーのステータスが維持されます。
session.setAttribute(String name,Object obj); //往session中存放内容(通过键和值的形式) session.getAtrribute(String name); //通过键从session中获取内容 session.removeAttribute(String name); //把存储在session中的对象移除 session.invalidate(); //销毁session
隠しフォーム フィールド
隠しフォーム フィールドは、HTML の隠しフォーム (隠し入力と入力) にセッション ID を追加します。リダイレクトと転送
を通じて情報を送信します。フォームを通じてサーバーに送信されますが、それ自体は表示されません。
たとえば、2 番目のフォームは最初のフォームのコンテンツを取得し、最初のフォームのコンテンツを隠しフィールド (テキスト ボックスの種類は非表示) として受け入れ、それを再び 3 番目のフォームに渡します。簡単に言えば、リクエストの順序は次のとおりです: フォーム 1 - - > フォーム 2 - - > フォーム 3 ただし、フォーム 3 はフォーム 1 で送信された内容を使用する必要があるため、移行としてフォーム 2 が必要になります。内容はフォーム 3 に渡される前に非表示フィールドとして保存されます。
URL を書き換える
URL 内のセッション ID をエンコードします。例: counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980 このようにして、ブラウザが Cookie をサポートしていない場合でも、セッション追跡を実現できます。
URL レプリケーションの場合、サーバーはリクエストされた URI からセッション ID を抽出し、リクエストを対応するセッションに関連付けます。その後、セッション データにアクセスすると、JSP ページは Cookie 追跡セッションを使用するのと同じ方法で処理されます。まったく同じ方法でIDを取得します。したがって、セッションの実装は Cookie または URL コピー技術に依存します。
String sessionId = request.getRequestedSessionId(); //获得sessionId
応答オブジェクトの encodeURL (StringURL) を使用して URL 値の書き換えを実装します。
<a href="<%=response.encodeURL("index.jsp") %>"> index页面</a>
このメソッドは、クライアントが Cookie をサポートしているかどうかを自動的に判断します。クライアントが Cookie をサポートしている場合、URL はそのまま出力されます。クライアントが Cookie をサポートしていない場合は、encodeURL() メソッドが呼び出され、ユーザーのセッション ID が自動的に URL に書き換えられます。書き換え後の出力は次のようになります。
a href="index.jsp?jsessionid=0E0C61100AEB06DE6A95EB1CD1DA8158">index页面</a>
HttpServletResponse インターフェイスは、URL 書き換え用の 2 つのメソッドを定義します。
encodeURL メソッド (ハイパーリンクに使用されます)。形式
encodeRedirectURL メソッドの action 属性は、HttpServletResponse.sendRedirect() メソッド
に渡される URL を書き換えるために使用されます。リクエスト メッセージに Cookie ヘッダー フィールドが含まれているかどうかに基づいて、URL 書き換えを実行するかどうかを決定します。これら 2 つのメソッドに URL をパラメータとして渡すことで、URL の書き換えを完了し、URL の後に jsessionid パラメータとその値を追加できます。ブラウザの Cookie をオフにして、Web ページのソース ファイルの URL の背後に jsessionid パラメータとその値があるかどうかを確認する実験を行うことができます。
以上がJSP/サーブレットセッションとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。