ホームページ  >  記事  >  バックエンド開発  >  SESSION はサーバー側 (PHP/JAVA) でどのように実装されますか?

SESSION はサーバー側 (PHP/JAVA) でどのように実装されますか?

WBOY
WBOYオリジナル
2016-06-17 08:31:581191ブラウズ

通常、セッションは Cookie に基づいて実装できると言われますが、これは主にクライアントの観点からのものです。サーバー側のストレージ状況を知りたい。セッションはメモリに保存されるため、Java/PHP のバックグラウンドで、Web ページ リクエスト (JSP/PHP) 内の Web ページ内のオブジェクト/変数のライフ サイクルは何ですか、また SESSION 関連のオブジェクト/変数はどのように保存されますか長い間記憶に残っていますが、破壊されていませんか?
追伸: Web 初心者

返信内容:

クライアントが最初のリクエストを行うとき、セッションが使用されている場合、サーバーは応答ヘッダーの Set-Cookie などのヘッダー項目を通じて sessionId をブラウザーの Cookie に書き戻します。このタイプの Cookie は SessionCookie とも呼ばれます。サーバーがシャットダウンされるとクリアされます。再度リクエストする場合、ブラウザーによって送信されるリクエスト ヘッダーには、先ほど書き戻された sessionId がサーバーに再び到達すると、リクエスト用に作成されたセッションがこの sessionId に基づいて構成され、すべてのセッションが実行されます。すべての情報がこの sessionId とともに保存されます。
サーバー側でのこのセッションのデフォルトのタイムアウトは 30 分です。これは、30 分間使用されないとタイムアウトがクリアされることを意味します。また、使用した場合、アクティブ時間は毎回更新され、30分を超えてもクリアされません。
セッションがどこに存在するかについては、具体的な実装形態にすぎません。たとえば、セッションの高可用性を実現するために、セッションは Memcache や Redis に保存される場合もあれば、データに保存される場合もあります。アクセスは一貫しています。 セッションは、保存と送信の 2 つの部分に分かれています。一般に、ストレージはファイルの形式でキャッシュ ディレクトリ (tmp) に保存されますが、これは memcache ストレージなどのさまざまな形式に変更できます。配信に関しては、セッションのライフサイクルの Cookie を通じて配信されるのが一般的で、セッションが終了すると Cookie が消滅するため、実際にはサーバー側のセッションは存在していると考えられます。もちろん、他のメソッドに変更することもできます。たとえば、アプリのインターフェイスを作成するときに Cookie の転送が使用できない場合は、session_id を取得するメソッドを使用することもできます。明らかに、インターフェースを作成するのは非常に便利です。 下剤

セッション Cookie はブラウザに保存される Cookie の一種であり、サーバーには必ずしも対応するストレージが必要ありません。

サーバーには保存されたセッションがあり、これは通常、セッション ID を指します。サーバーは、セッション ID に基づいてユーザー セッション データにマップします。サーバー側では、送信時にセッション ID のみが送信されます。

サーバーにデータを保存するには、ファイルベース、アプリケーション メモリ、リレーショナル データベース、NoSQL など、さまざまな方法があります。

答えは比較的抽象的ですが、多くの技術的な質問と同じように、ある用語を明確に説明するには、正確を期すために他の用語を使用する必要があります。詳細な回答は以下のリンクでご覧いただけます。

en.m.wikipedia.org/wiki

en.m.wikipedia.org/wiki Java での実装は、サーブレットの仕様に従って、Cookie に JSESSIONID を入れます
Tomcat には SessionManager があり、これはほぼセッション session = map.get("JSESSIONID");
セッションには有効期限メカニズムがあります。
詳細については、Tomcat コードを参照してください。 ブラウザの PHP プログラム ディレクトリにはセッション情報を保存するファイルがあり、ファイル ストリームは PHP がセッションを保存するデフォルトの方法でもあります。現在、Baidu などの同時実行性の高い Web サイトでは、セッション データを保存するために memcache またはその他のよりハイテクな手段を使用するのが一般的です。
サーバー側のセッションは、データベースの外部キーに似た session_id を使用して、クライアント Cookie の PHPSESSION フィールドに接続します。 セッションのコンテンツはサーバーとブラウザの両方に保存されます

銀行からお金を引き出すのと同様です
ブラウザが保存するものは session_id と呼ばれ、銀行のカード番号に似ています
サーバーの内容saves はセッション情報です

ブラウザがサーバーにアクセスすると、この番号がブラウザに渡されます。サーバーはこの番号に基づいて対応する情報を抽出します。そのため、session_id は非常に重要であり、犯罪者によって使用される可能性があります
そのため、何かの代金を支払うときに、さらなる検証が必要になる場合があります。

ブラウザとサーバーを閉じても、この情報は失われませんが、次にブラウザを開いたときに生成される session_id は異なります。

この情報は永久に保存されますか?
いいえ、この情報は期限切れになり、期限切れのサーバーはこの情報を破棄するため、ブラウザを閉じていなくても一定時間が経過すると、再度ログインする必要があります。銀行のデータベース情報が失われるのと同じで、カードを持っていても意味がありません。

サーバーの構成によって、この情報が失われる時間も異なります。

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