セッションとは何ですか?
WIKIの説明によると、SESSIONとは2つの通信機器間に存在する対話型の情報であり、ある時刻に確立され、一定期間後に消滅するそうです。一般的なセッションには、TCP セッション、WEB セッション (HTTP セッション)、ログイン セッションなどが含まれます。 OSI モデルにおけるセッション実装のさまざまな場所に応じて、セッションは主にいくつかのタイプに分けられます。1 つは、WEB セッション (HTTP セッション) と Telnet リモート ログイン セッションを含むアプリケーション層セッションです。セッション層実装には、セッション開始プロトコルが含まれます。 (SIP) ) およびトランスポート層で実装されるインターネット電話通話は TCP SESSION です。
この記事では主に WEB SESSION について説明します。大きく分けて、クライアント側 SESSION とサーバー側 SESSION の 2 種類があります。Java Beans によって提供される最も一般的なものは後者です。
セッションって何をするの?
コンピュータ分野、特にネットワークにおいては、SESSIONが特に広く使われており、対話(Dialogue)、セッションなどとも呼ばれ、一般に2つの通信機器間で保存される状態を指すこともあります。ユーザー間およびコンピュータ間 (ログイン SESSION)。ステートレス通信とは異なり、SESSIONは通常、通信状態を保存するために使用されるため、通信を行う2者のうち少なくとも一方がSESSIONの履歴を保存する必要があります。
SESSION(WEB SESSION)はどのように実施されるのですか? ブラウザとサーバー間でHTTP通信が行われると、通常、ステータスを識別するためにHTTP Cookieが含まれ、通常、ユーザーのいくつかの検証情報とレベルが記録されます。いくつかのプログラミング言語で最も一般的に使用される Http セッション トークンは、JSESSIONID (JSP)、PHPSESSID (PHP)、ASPSESSIONID (ASP) です。この識別子は通常、ハッシュ関数によって生成され、ユーザーの ID を一意に表すことができます。サーバーとクライアントが通信するとき、通信は GET または POST パラメータとしてクライアントに保存されます。
SESSION を実装するには通常、サーバー側 SESSION とクライアント側 SESSION の 2 つの方法があります。どちらの方法にも独自の長所と短所があります。
サーバー側の SESSION は実装が簡単で比較的効率的ですが、負荷分散や高可用性の要件が発生した場合の処理がより困難になります。また、内生システムにストレージ デバイスがない場合にも使用できません。負荷分散は、ファイル システムを共有するか、顧客に 1 つのサーバーのみに強制的にログインさせることで実現できますが、これでは効率が低下します。ストレージのないデバイスの場合、サーバー側の SESSION 実装は RAM を使用して解決することもできます (参考資料 6 を参照)。この方法は、クライアント接続が制限されているシステム (ルーティングまたはアクセス ポイント デバイスなど) に効果的です。クライアント側の SESSION を使用すると、負荷分散アルゴリズムの回避など、サーバー側の SESSION のいくつかの問題を解決できますが、それ自体がいくつかの問題を引き起こすこともあります。クライアント SESSION は、Cookie と暗号化テクノロジーを使用して、異なるリクエスト間の状態を保存します。各動的ページが終了すると、現在のセッションがカウントされ、クライアントに送り返されます。リクエストが成功するたびに、Cookie がサーバーに送信され、サーバーがユーザーの ID を「記憶」できるようになります。クライアント SESSION の最も重要な問題はセキュリティです。Cookie がハイジャックまたは改ざんされると、ユーザーの情報のセキュリティが失われます。
PHPでSESSIONを設定するにはどうすればよいですか?
PHP 開発環境をセットアップした後、phpinfo() を通じて以下を含む SESSION 関連部分を表示できます:SESSION モジュール、PHP V5.2.9 バージョンでは、合計 25 個の変数があります。そのうちのいくつかは、通常、以下で使用されます:
Session.cookie_lifetime ストレージの cookie の名前を設定 sessionid
session.name session、デフォルトは phpsessid です
SaVE_HANDLER Se SSION のストレージメソッド、デフォルトはファイル
session .save_pathデフォルトでは、Fedora
session.gc_probabilitysession.gc_divisor
session.gc_maxlifetime の下の /var/lib/php/session に保存されます。 これら 3 つのオプションは、GC メカニズムの確率を処理するために使用されます
session.cache_limiter (nocache、private、 private_no_expire,public)session.cache_expire これら 2 つのオプションは、SESSION ページをキャッシュするために使用されます
まず最初の質問について考えてみましょう。SESSION の有効期限はどのくらいかかりますか? PHP プログラムで SESSION を使用する場合は、まず session_start() を参照する必要があります。この関数が実行されると、SESSION ファイルが SESSION の格納ディレクトリに生成されます (ファイル ハンドラーが使用されている場合)。同時に参照すると、サーバーはハッシュされた SESSION 名を保存する PHPSESSID という名前の Cookie を参照します。
SESSION の有効期限は、ガベージ コレクション メカニズム (ガベージ コレクション) に依存します。SESSION が作成されると、クライアント スクリプトが SESSION 内の変数にアクセスするたびに、SESSION ファイルのアクセス時間が変化します。更新します。各訪問は、クライアントに保存されている SESSIONID に基づいて、サーバーに保存されている一意の SESSION を要求します。クライアントの Cookie の有効期限が切れると、サーバー上の SESSION ファイルはまだアクセスされていませんが、どの SESSION にアクセスするかを知ることはできません。有効期限が切れると、サーバー リソースが無駄に消費されます。
同時に、ユーザーのセッションをすぐに期限切れにしたい場合は、Cookie を設定することでこれを実現できます。 SESSION リサイクルは、ページがアクセスされるたびに実行されます。リサイクルの確率は session.gc_probability、session_gc_divisor で指定され、デフォルトは ±1/100 です。 1 に設定すると、SESSION がその有効期間を超えてアクセスされるたびに、SESSION がリサイクルされます。
2 つの要件: 1. PHP で SESSION が期限切れにならないようにするか、SESSION の有効期限を延長します。 2. SESSION をすぐに期限切れにします。
1. PHP では、特に内部アプリケーション システムや大規模なフォームがある場合、SESSION が期限切れにならないようにし、SESSION の有効期限を延長することが非常に必要です。上司がフォームに記入するときのことを考えてください。ちょうど昼食の時間でした。彼は昼食から戻ってくるまでフォームを保管し、残りの内容を記入します。送信後に表示されるのは、通常、ログイン インターフェイスです。ユーザーエクスペリエンスを向上させたい場合は、上司のフォームが問題を引き起こすのを防ぐことが重要です。SESSION のライフサイクルを延長する必要があります。
PHP で SESSION の期限切れを防ぎ、SESSION の有効期限を延長するには、session.gc_maxlifetime を設定することで実現できますが、まず、gc がリサイクルを実行する前にクライアントの Cookie が期限切れにならないようにする必要があります。 gc_maxlifetime を長く設定すると、セッションの有効期間を延長できますが、すべてのリクエストが長期間保持されるわけではないアプリケーションの場合、これは明らかにサーバー構成にとって最良の選択ではありません。
SESSIONのリサイクルメカニズムは、SESSIONファイルの最終アクセス時刻に基づいて判断され、maxlifetimeを超えた場合、リサイクル確率に従ってリサイクルされることがわかっています。したがって、SESSION に定期的にアクセスするだけで済みます。これは、ページを更新することで実現できます。これには解決策があります。
JS を介して定期的にページにアクセスします。
Iframe を使用してページを定期的に更新します。
ページに他の要素が埋め込まれないように、プログラムを直接使用してリクエストを送信します。 SESSION の有効期限が切れないようにするため、ページ (大きなフォーム ページなど) で SESSION を長期間維持するだけで済みます。
<ol class="dp-c"> <li class="alt"><span><span><script><SPAN class=string><FONT color=#0000ff>"text/javascript"</script></span><span>> </span></span></li> <li> <span> </span><span class="keyword"><strong><font color="#006699">function</font></strong></span><span> keepMeAlive(imgName){ </span> </li> <li class="alt"><span> myImg = document.getElementById(imgName); </span></li> <li> <span> </span><span class="keyword"><strong><font color="#006699">if</font></strong></span><span>(myImg) myImg.src = myImg.src.replace(/?.*$/, </span><span class="string"><font color="#0000ff">'?'</font></span><span> + Math.random()); </span> </li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"> <span> window.setInterval(</span><span class="string"><font color="#0000ff">"keepMeAlive('phpImg');"</font></span><span>, 4000); </span> </li> <li><span> </span></li> <li class="alt"><span> <img alt="PHP で SESSION を維持する方法とそれによって生じる考え_PHP チュートリアル" ><span class="string"><font color="#0000ff">"phpImg"</font></span><span> src=</span><span class="string"><font color="#0000ff">"http://www.phpplot.com/phpplot/session/sess_refresh.php?"</font></span><span> width=</span><span class="string"><font color="#0000ff">"1"</font></span><span> height=</span><span class="string"><font color="#0000ff">"1"</font></span><span> /> </span></span></li> </ol>このリンクのリクエストがブラウザによってキャッシュされないように、URL の後に乱数が追加されます。 2. SESSION をすぐに期限切れにする方法はたくさんあります。session_destroy() を使用することも、上記のアイデアを使用して session_destroy ページをリクエストすることもできます。
セッションは安全ですか?
PHP マニュアルには明確に記載されています: SESSION は、SESSION に保存された情報が作成者のみに表示されることを保証しません。一部のリモート操作を安全に処理したい場合は、HTTPS が唯一の選択肢です。最も基本的なことは、SESSION にユーザーの情報が存在するからといって、そのユーザーは本人である必要があると考えないことです。ただし、SESSION 内の情報によりユーザー名とパスワードによって認証されているかのように錯覚します。したがって、パスワードなどを変更する必要がある場合は、ユーザーにパスワードの再入力を求めることをお勧めします。
初期の Apache バージョンでは、PHPSESSID の保存に COOKIE を使用していませんでしたが、URL の書き換えを使用していました。つまり、アクティブ化された Apache の新しいバージョンの SESSION に属していることを示すために、各 URL の後に PHPSESSID= session.use_trans_id = 0; PHP で SESSION を維持する: 上記の方法はどちらも JS が無効になっている場合に使用され、すべての機能が利用できなくなります。JS が無効になっている場合でもアプリケーションを正常に動作させる方法はさらに難しいようです。これを達成するのにかかる時間と得られる結果を比較検討する必要があります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

Dreamweaver Mac版
ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック









