前に勉強していたときはあまり注目していませんでしたが、今日は戻ってSessionのライフサイクルを注意深く勉強しました。
セッションはサーバー側に保存されるのが一般的で、(高速アクセスのため)サーバーのメモリに保存されないようにするため、ユーザーが初めてサーバーにアクセスするときにセッションが作成されるはずです。セッションは JSP、サーブレット、およびその他のプログラムにアクセスする場合にのみ作成され、HTML や IMAGE などの静的リソースにアクセスする場合のみセッションは作成されないことに注意してください。 request.getSession(true) を呼び出してセッションを強制することができます。
セッションはいつ期限切れになりますか?
1.サーバーは、長期間非アクティブであったセッションをサーバーのメモリからクリアし、この時点でセッションは無効になります。 Tomcat のセッションのデフォルトの有効期限は 20 分です。
2.Sessionのinvalidateメソッドを呼び出します。
セッションブラウザの要件:
セッションはサーバー上に保存され、クライアントに対して透過的ですが、通常の動作にはクライアントブラウザのサポートが必要です。これは、Session が識別マークとして Cookie を使用する必要があるためです。 HTTP プロトコルはステートレスであり、セッションは HTTP 接続に基づいて同じクライアントであるかどうかを判断できません。そのため、サーバーは JSESSIONID という名前の Cookie をクライアントのブラウザーに送信します。その値はセッションの ID (つまり、 HttpSession.getId() 戻り値)。セッションはこの Cookie を使用して、同じユーザーであるかどうかを識別します。
この Cookie はサーバーによって自動的に生成され、その maxAge 属性は通常 -1 です。これは、現在のブラウザー内でのみ有効であり、ブラウザー ウィンドウ間で共有されないことを意味します。したがって、同じマシン上の 2 つのブラウザ ウィンドウがサーバーにアクセスすると、2 つの異なるセッションが生成されます。ただし、ブラウザウィンドウ内のリンクやスクリプト等により新たに開かれるウィンドウ(デスクトップブラウザのアイコンのダブルクリック等により開かれないウィンドウ)は除きます。このタイプの子ウィンドウは親ウィンドウの Cookie を共有するため、セッションを共有します。
注: 子ウィンドウを除き、新しく開かれたブラウザ ウィンドウは新しいセッションを生成します。子ウィンドウは親ウィンドウのセッションを共有します。たとえば、リンクを右クリックしてポップアップ ショートカット メニューから [新しいウィンドウで開く] を選択すると、子ウィンドウは親ウィンドウのセッションにアクセスできます。
クライアントのブラウザが Cookie 機能を無効にしている場合、または Cookie をサポートしていない場合はどうすればよいですか?たとえば、モバイル ブラウザの大部分は Cookie をサポートしていません。 Java Web は、URL アドレスの書き換えという別の解決策を提供します。
URLアドレスの書き換えは、Cookieをサポートしていないクライアントのための解決策です。 URL アドレス書き換えの原理は、ユーザーのセッション ID 情報を URL アドレスに書き換えることです。サーバーは、書き換えられた URL を解析してセッション ID を取得できます。このようにして、クライアントが Cookie をサポートしていない場合でも、Session を使用してユーザーのステータスを記録できます。 HttpServletResponse クラスは、URL アドレス書き換えを実装するための encodeURL (String url) を提供します。このメソッドは、クライアントが Cookie をサポートするかどうかを自動的に判断します。クライアントが Cookie をサポートしている場合、URL はそのまま出力されます。クライアントが Cookie をサポートしていない場合、ユーザーのセッション ID が URL に書き換えられます。
注: TOMCAT は、リクエストに Cookie が含まれるかどうかに基づいて、クライアントのブラウザが Cookie をサポートするかどうかを判断します。クライアントは Cookie をサポートしている可能性がありますが、最初のリクエストでは Cookie が送信されないため (送信する Cookie がないため)、書き換えられた URL アドレスには jsessionid が含まれたままになります。 2回目のアクセス時はサーバーがブラウザにCookieを書き込んでいるため、書き換え後のURLアドレスにはjsessionidは含まれません。
以上がセッションのライフサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。