セッション
セッション:
- 対応する英単語:セッション
- ユーザーはブラウザーを開き、一連のアクションを実行してから、ブラウザーを閉じます。全体のプロセスはセッションと呼ばれます
- セッションには複数のリクエストが含まれます
セッション メカニズムは B/S 構造の一部であり、その主な機能はセッション状態を保存することです。(ユーザーが正常にログインした後、ユーザーのログイン状態をセッションに保存します)
セッションメカニズムを使用する理由
- HTTP プロトコルはステートレス プロトコルであるため
- ステートレス: リクエスト時に B と S が接続され、リクエストが終了すると接続が切断されます。
- サーバーへの負担を軽減できます。
- セッションの状態を保存するには、セッションのみを使用できます。
- 利用しない理由と申請書
- リクエストのスコープが小さすぎます: 1 回のリクエスト後に破棄され、リクエストが再度行われたときにリクエスト オブジェクトが同じではありません。
- アプリケーションのスコープが大きすぎます: 1 つのアプリケーションに対して 1 つのアプリケーション、ブラウザが開いてから閉じられ、別のブラウザが開かれますが、それはまだ同じアプリケーション オブジェクトであり、セッションの状態を満たしていません。
- ブラウザを開いてから閉じるまで、セッション オブジェクトは同じです。
セッションの実現原理
画像の説明:
単語の説明:
- ブラウザが初めてサーバーにアクセスすると、サーバーはオブジェクトと対応する sessionId を生成し、sessionId をブラウザに返します。
- ブラウザーは、sessionId を取得すると、sessionId を Cookie の形式で保存します。
- 次回サーバーにアクセスすると、ブラウザメモリ内のsessionIdが自動的にサーバーに送信され、サーバーはsessionIdに基づいて対応するセッションオブジェクトを見つけます
- ブラウザを閉じた後、メモリが消え、Cookie が消え、sessionId が消え、セッションが終了します
最初の訪問では、サーバーから返された sessionId が応答で受信され、cookie=7A の形式で保存されます。
次回アクセスすると、sessionId が自動的にサーバーに送信されます。
クッキー無効
通常、サーバーは sessionId をブラウザーに送信しますが、ブラウザーはそれを拒否するため、ブラウザーがサーバーにアクセスするたびに、返されるセッション オブジェクトはまったく新しいものになります。
Cookie が無効になっているときにセッション メカニズムを使用する場合は、次のようにします。
URL 書き換えメカニズムを使用します: http://localhost:8080/testSession;jsessionid=E62524626BE76547D7287F6B7BB73239
サービス パスにアクセスするたびに sessionId を連結する必要があるため、このようなコストは比較的大きくなります。
要約する
- セッションはサーバー側で保存され、サーバー側で作成されます
- 作成されたメソッド:
- request.getSession(); // セッション オブジェクトを取得します
- request.getSession(false); // 現在のセッションが存在するかどうかを判断し、存在しない場合、返されるセッション オブジェクトは null
- HTTP プロトコルの B/S 構造上、サーバーはいつブラウザが閉じられたかわからないため、セッションが破棄されることはありませんが、一定時間セッション オブジェクトを操作しないと、セッション オブジェクトは破棄されます。 . デフォルトの時間は 30 分です。
- セッション:セッションの作成~セッションの破棄
- セッションには 2 つのモードがあります。
- 手動破棄: サーバーが API を呼び出します: invalidate();
- タイムアウトによる破壊: 一定期間、誰もセッション オブジェクトを操作しません
クッキー
- セッションの実装原則では、各セッション オブジェクトには対応する sessionId があります。
- 例: JSESSIONID=5CB05924651451FD94F42011461CC4FB、このキーと値のペアのデータは Cookie インスタンスです。
- ブラウザが閉じられておらず、ユーザーがリクエストを再度開始する限り、ブラウザは「実行中のメモリ」内の Cookie をサーバーに自動的に送信します。
- サーバーは、「5CB05924651451FD94F42011461CC4FB」の値に従って、対応するセッション オブジェクトを見つけます。
- Cookie のキーと値はどちらも文字列です
位置を保存
- 最後にブラウザクライアントに保存
- 実行中のメモリに保存することもできます [Cookie はブラウザを閉じると消えます]
- ディスクファイルにも保存可能【永久保存】
効果
- Cookie は、セッションと同様に、セッション状態を保存するために使用されます
Java での Cookie の操作
Cookie インスタンスを作成します。
Cookie product = new Cookie("productId","1gaga3g23t32g"); Cookie user = new Cookie("name","admin");
クッキーの有効時間を設定する
- 有効時間 > 0 Cookie はディスクに書き込まれます。
- 有効時間 = 0 Cookie がディスクに書き込まれ、以前に設定された Cookie が上書きされます。これは、Cookie を削除することとも理解できます。
- 有効時間 < 0 Cookie はブラウザの実行メモリに保存されます
- この Cookie が設定されていない場合、ブラウザの実行メモリに保存されます
// 设置有效时间 product.setMaxAge(60 * 60);
Cookie に関連付けられたパスを設定します
URL の例: http://localhost:8080/cookie/create
デフォルトの関連付けられたパスは http://localhost:8080/cookie/* です。これらのパス ブラウザは自動的に Cookie をサーバーに送信します。
関連付けられたパスが設定されている場合、設定はメインです
product.setPath("/cookie");
Cookie をブラウザに返す
response.addCookie(product);
サーバーはクッキーを取得します
戻り値は配列、Cookieが取得できない場合はnullを返す
Cookie[] cookies = req.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { String name = cookie.getName(); String value = cookie.getValue(); System.out.println(name+"--"+value); } }
面接の質問
クッキーとセッションの違い
1.セッション定義:
Session オブジェクトはサーバー側に格納され、主にユーザー セッションで必要な属性データと構成データを格納するために使用されます。SessionID はブラウザ側に保存する必要があり、ブラウザはインターフェイス リクエストを送信するときにこの SessionID を保持する必要があります。
2. クッキーの定義:
Cookie とは、ブラウザ側に保存される小さなテキスト データで、サイズは 4KB を超えません。
一部の Web サイトでは、Session メカニズムを使用してユーザーの ID を識別し、通常は SessionID を Cookie に保存します。ネットワーク リクエストを送信すると、Cookie がリクエスト ヘッダーに一緒にサーバーに送信されます。
Cookie とセッションが必要な理由
Cookie とセッションは、クライアントとサーバーの間で状態情報を保存および維持するために使用される 2 つの異なるテクノロジです。
Cookie は、クライアントによって保存され、クライアントとサーバーの間でやり取りされる小さなデータです。Cookie はブラウザのファイル システムに保存され、ブラウザがリクエストを送信すると、これらのデータが自動的に転送されます。
セッションは、サーバー側に保存される小さなデータであり、ユーザーの状態を追跡するために使用できます。セッションデータはサーバーに保存され、サーバーによって維持されます。クライアントがサーバーにアクセスすると、サーバーはクライアントの要求に従ってクライアントの ID を判別し、クライアントにセッション ID を割り当てます。クライアントは要求するたびにセッション ID を持ち、サーバーはこのセッション ID を使用してクライアントを識別し、対応するセッション データを取得します。
セッションの動作原理を詳しく説明してください。
セッションは、Web アプリケーションでユーザーの状態を追跡するためのメカニズムです。ユーザーが Web アプリケーションにアクセスすると、サーバーはそのユーザーの一意のセッション ID を作成し、その ID をユーザーのブラウザーの Cookie に保存します。セッション ID は、ユーザーがアプリケーションと対話するときにユーザーを識別し、ユーザーに関する情報をサーバー側に格納するために、サーバーによって使用されます。この情報には、ユーザーのログイン状態、ショッピング カートの内容、閲覧履歴などが含まれます。セッションを使用することで、Web アプリケーションは、ユーザー認証、データの永続化など、より高度な機能を実装できます。
セッションが Cookie よりも安全なのはなぜですか?
クッキーは、ユーザーのコンピューターにデータを保存するためのメカニズムです。Web アプリケーションは、Cookie を使用して、ユーザー ID、設定、ショッピング カートの内容などのユーザー情報を保存できます。ただし、Cookie はユーザーのコンピューターに保存され、クライアント側でアクセスして変更できるため、Cookie は攻撃や偽造に対してより脆弱になり、セキュリティ上の脅威になります。
対照的に、セッション メカニズムはデータをサーバー側に保存し、ユーザーが Web アプリケーションと対話する場合にのみクライアントに送信します。ユーザーはサーバーに保存されたセッション データにアクセスしたり変更したりできないため、セッションは Cookie よりも安全です。さらに、Web アプリケーションは SSL/TLS 暗号化を使用して転送中のセッション データを保護し、セキュリティをさらに強化できます。
一般に、Cookie とセッションの両方が Web アプリケーションのユーザー追跡に使用されますが、セッションはユーザーのコンピューターではなくサーバー側にデータを保存し、セキュリティ リスクを軽減するため、より安全です。