PHP で SESSION を維持する方法とそれによって生じる考え_PHP チュートリアル
セッションとは何ですか?
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 type=</SPAN><SPAN class=string><FONT color=#0000ff>"text/javascript"</FONT></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> </script> </span></li> <li class="alt"><span> <img id=</SPAN><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></li> </ol>
セッションは安全ですか?
PHP マニュアルには明確に記載されています: SESSION は、SESSION に保存された情報が作成者のみに表示されることを保証しません。一部のリモート操作を安全に処理したい場合は、HTTPS が唯一の選択肢です。最も基本的なことは、SESSION にユーザーの情報が存在するからといって、そのユーザーは本人である必要があると考えないことです。ただし、SESSION 内の情報によりユーザー名とパスワードによって認証されているかのように錯覚します。したがって、パスワードなどを変更する必要がある場合は、ユーザーにパスワードの再入力を求めることをお勧めします。
初期の Apache バージョンでは、PHPSESSID の保存に COOKIE を使用していませんでしたが、URL の書き換えを使用していました。つまり、アクティブ化された Apache の新しいバージョンの SESSION に属していることを示すために、各 URL の後に PHPSESSID=
session.use_trans_id = 0;
したがって、この意味で、SESSION を長時間延長したり、SESSION をオンラインに維持したりすることは、セキュリティにとって常に良いことではありません。究極の解決策は、ユーザーがログイン後に送信してログイン ウィンドウにジャンプし、すべてのデータが残っている状態で入力ページに戻ることです。これの実装は、Ajax を使用して解決するのは難しくありません。現在のユーザー データは、XML であっても JSON であっても、一定の間隔で保存場所に POST されます。PHP で SESSION を維持する:
クライアントが JavaScript をサポートしていない場合に採用できるメソッド: 1. フローティング レイヤーを作成し、それを最上位に表示します。ユーザーが JS を無効にしない場合は、フローティングレイヤーが消えます;2. すべての INPUT を無効に設定し、JS を使用して有効に設定します。上記の方法はどちらも JS が無効になっている場合に使用され、すべての機能が利用できなくなります。JS が無効になっている場合でもアプリケーションを正常に動作させる方法はさらに難しいようです。これを達成するのにかかる時間と得られる結果を比較検討する必要があります。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
