ホームページ  >  記事  >  Java  >  Cookieとセッションのセッションとセッション状態の説明

Cookieとセッションのセッションとセッション状態の説明

巴扎黑
巴扎黑オリジナル
2017-07-17 14:30:292007ブラウズ

1. セッションの概要

1) 現象: HTTP プロトコルは、同じブラウザーによって発行されたリクエストを完全に識別できません。

2)

解決策:セッション状態の助けを借りて、Web サーバーは同じセッションに属する一連のリクエストと応答プロセスを関連付けることができます。

3)実装: ブラウザが発行する各リクエストメッセージを識別するように要求します。 この識別をセッションID(SessionID)と呼びます。

2. Cookie

1: Cookie には次の 2 種類があります:

1> セッション Cookie (セッション Cookie)

有効期限が設定されていない場合、Cookie はライフ サイクルは次のとおりです。ブラウザ セッション中、Cookie はブラウザ ウィンドウを閉じるとすぐに消えます。

存続期間はブラウザーセッションです。

通常、ハードディスクではなくメモリに保存されます。

2>永続 Cookie (永続 Cookie)

有効期限が設定されている場合、ブラウザを閉じて再度開いた後も、これらの Cookie は設定された有効期限が経過するまで有効です。超えた。

ユーザーのハードドライブに保存され、同じブラウザで取得できます。

2: セッション関連の知識

2.1: セッションとは何ですか?

セッションは、ユーザーごとに変数の値を保存するメカニズムです。セッションは Cookie または URL の書き換えに基づいています。セッションは機能します

client————>1.request————————->server

2. session_start();

|<————-3.reponse( SESSION_ID) <——–|

|————->4.request(SESSION_ID)————>|

応答(SESSION_ID)<————|

|———— ->7. request(SESSION_ID + logout)–>|

8. session_destroy();

|<————- 9. 応答(Cookieファイルの削除)<——-|

クライアントはWebページを開き、サーバーにリクエストを送信します。クライアントに対応するCookieファイルがないため、SESSION_IDはリクエストで送信されません

サーバーはクライアントからリクエストを受信した後、それを受け入れます。セッションの処理は、まず session_start() 関数を実行することによって開始されます。まず、リクエストに SESSION_ID があるかどうかを確認し、存在する場合は、SESSION_ID を含むファイルを呼び出し、その情報を $ に書き込みます。 _SESSION を取得し、sess_ で始まるファイルに保存します。

書き込まれた情報の $_SESSION パラメータをクライアントに送り返します。クライアントはサーバーから送信された情報を取得した後、その情報を Cookie に保存します。

クライアントはCookie内のSESSION_IDをヘッダーに書き込み、再度サーバーにリクエストを送信します。操作 1 ~ 3 を繰り返します

クライアントはログアウト要求を発行します

サーバーが要求を受け入れた後、session_destroy() 関数を実行してセッション ファイルの削除を開始します

サーバーはクライアントに保存された Cookie ファイルを削除するコマンドを発行しますクライアント上: setcookie( session_name(), ”, time()-60, '/');

2.3: 注

通常、複数のウィンドウ間で使用することはできませんが、セッション ID は永続的な Cookie に保存されます。そして、新しいウィンドウから読み取ります。セッション ID を取得して、クロスウィンドウでの使用を実現できます。

ビュー数が多い Web サイトでは、セッションは安全ではなく、重複したセッション ID が表示される可能性があります。必要な場合は、クライアントは自身のセッション ID を知っており、Javascript を通じてのみ読み取ることができます。

2.4 php の使用法と設定

Session_start(): セッションを開始する既存のセッションを返す前にブラウザは Session_start() を使用できません。そうでない場合は、php.ini で session.auto_start=1 を有効にすると、毎回 session_start() を呼び出す必要がなくなります。セッションを使用する時間。

session.auto_start=1 の場合、session_save_path (‘./t/’); は無効になります。後者のステートメントを最初に配置する必要があるためです。

2.5 PHP のセッション ストレージと処理能力を向上させる

;session.save_path = “N;MODE;/path” この設定により、セッション ストレージ ディレクトリのマルチレベル ハッシュを実行できます。ここで、「N」はディレクトリを意味します設定するレベル、

"MODE" はディレクトリの権限属性を表し、デフォルトは 600 です

2.6: マルチサーバー共有 php SESSION

1. NFS または Samba 共有メソッド。セッションを保存できるようにします。各サーバーでファイルをディスク共有する、この方法はシンプルで実現可能です。

2. データベースへの集中保存。これは、PHP が提供する session_set_save_handler() 関数を使用して再定義する、比較的一般的な実装方法です。

3: Cookie の知識

Cookie とは何ですか? Cookie はどのように機能するのでしょうか? Cookie は、ユーザーのリクエストやページとともに Web サーバーとブラウザーの間で受け渡される小さなテキスト情報です。 Cookie に含まれる情報は、ユーザーがサイトにアクセスするたびに Web アプリケーションによって読み取ることができます。 Cookie の仕組みの基本 ユーザーがサイト上のページに戻って URL www.*****.com を入力すると、ブラウザはローカル ハード ドライブ上でその URL に関連付けられた Cookie を探します。 Cookie が存在する場合、ブラウザはページリクエストとともにそれをサイトに送信します。 Cookie の用途は何ですか? 最も基本的な目的は次のとおりです: Cookie は、Web サイトが訪問者に関する情報を保存するのに役立ちます。より一般的には、Cookie は Web アプリケーションの継続性を維持する (つまり、「状態管理」を実行する) ための手段です。

1. クライアント実行プログラムは、サーバーにリクエスト結果を送信するように要求します。 2. セッションはメモリに保存され、プロセスと同時に存在するセッション Cookie です。この時点では、サーバーはセッション ファイルを保存しているため、時間を設定する必要があります。セッション ファイルを削除します
3. Cookie はローカル Cookie ファイルに一部の情報を保存し、Cookie ファイルはキーと値のペアを保存します。 Cookie ファイルは、ローカル コンピュータのシステム ディスクの Document および Settings/Username ディレクトリに保存されます。アクセスする Web サイトの名前が www.abc.com の場合、一般的に、Cookie ファイルの名前は username@abc.com です。フォルダーを開いて確認してください。あなたが言及した getName は、Cookie ファイルに保存されている Cookie のキー値を取得します。

セッションはサーバー側でユーザーセッションデータを維持するためのメソッドであり、対応するCookieはクライアント側でユーザーデータを維持するためのものであることがわかります。 HTTP プロトコルはステートレス プロトコルであり、サーバーが応答すると、ブラウザーとの接続が失われます。Netscape では、クライアントがページ間でデータを交換できるように、最初にブラウザーに Cookie が導入されました。多くのユーザーのデータはどうなるのでしょうか?
まず第一に、サーバーが識別できるように、各クライアントは一意の識別子を持っている必要があります。一意の識別には、Cookie または GET による指定の 2 つの方法を使用することをお勧めします。 PHP のデフォルト設定では、セッションの使用時に「PHPSESSID」という名前の Cookie が作成されます (php.ini の session.name 値を変更することで指定できます)。クライアントが Cookie を無効にしている場合は、セッション ID を渡すように指定することもできます。サーバー経由 (php.ini の session.use_trans_sid などのパラメーターを変更)。
サーバー側の session.save_path ディレクトリを見ると、sess_vv9lpgf0nmkurgvkba1vbvj915 に似たファイルが多数見つかります。これは実際には、クライアントがセッション ID を に渡します。ファイルを読み取るとき、サーバーはセッション ID に基づいて対応するファイルを見つけます。保存するときは、最初にシリアル化してから書き込みます。
クライアントとサーバーの間で状態を維持するために使用されるソリューション

2) メカニズム:

サーバー側で HTTP ステータス情報を維持するために使用されます。

3)

原則:

セッションを作成するときは、まずクライアントのリクエストにセッション識別子 (つまり sessionID) が含まれているかどうか、つまり cookie という名前のものが存在するかどうかを確認します。 「JESESSIONID」、その値がリクエスト内の sessionID である場合は、それを取得して使用します。

  • それ以外の場合は、この顧客のセッションを作成し、このセッションに関連付けられたセッション ID を生成し、set-cookie を使用してリクエストに渡します。その後、次回リクエストが発行されるときに、このセッション ID が Cookie として使用されます。 「JESESSIONID」値がセッションIDに渡されます。

  • 4) 保存方法: 最も一般的に使用される方法は、Cookie を使用して保存することです。ただし、cokkie が無効になっている場合は、保存のための別のメカニズムが必要です。 URL 書き換えなど: URL パスの末尾に sessionID を追加します。

    5)注: 通常はCookieで保存されるため、Cookieを永続化するとブラウザを再起動してもセッションIDを取得できます。

    //用持久化cookie保存sessionIDCookie cookie = new Cookie("JESESSIONID",session.getId());
    cookie.setMaxAge(20);
    response.addCookie(cookie);

    2. セッションの作成

    1)セッション属性:

    • ページで指定されたセッション属性がデフォルトで true の場合、 WEB にアクセスする JSP ページを適用する場合、ページにはリクエストに関連付けられた Session オブジェクトが必要です。

    • それ以外の場合、JSP ページでは現在の JSP ページに関連付けられた Session オブジェクトが必要ではないため、JSP ページに初めてアクセスしたときにセッションは作成されません。

    2) request.getSession(boolean flag):

    • tru​​e、現在の JSP ページに関連付けられた HttpSession オブジェクトが既に存在する場合、それが返されます。そうでない場合は、新しい戻り値が作成されます。

    • false、現在の JSP ページに関連付けられた HttpSession オブジェクトがない場合は null を返し、それ以外の場合は取得した HttpSession オブジェクトを返します。

    • request.getSession() は request.getSession(true) と同等です。

    3. Session オブジェクトの破棄

    1) HttpSession の validate() メソッドを呼び出します。

    2) HttpSession は有効期限が過ぎると自動的に破棄されます。Tomcat の web.xml ファイルでセッションの最大経過時間を分単位で設定できます。

    りー

     

    相关方法签名:

    • int getMaxInactiveInterval()                         //返回最大时效,单位:秒

    • void setMaxInactiveInterval(int interval)      //设置最大时效

    3)服务器卸载当前 WEB 应用。

     

    4.Session相关方法

    String getId()                                                       //得到sessionID

    boolean isNew()                                                  //该session是不是新创建的

    long getCreationTime()                                       //该session被创建的时间

    long getLastAccessedTime()                              //该session最后一次被访问的时间

    void setAttribute(String key, Object value)         //存放值,相当于哈希表

    Object getAttrbute(String key)                           //根据键从session中取得对应的值

     

    5.URL重写实现Session跟踪

    方法签名:String encodeURL(String url)  //该方法会在URL后面加上sessionID

    重新登录
    重新登录

     

    以上がCookieとセッションのセッションとセッション状態の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。