web-dev-qa-db-ja.com

PHP $ _SESSION複数のユーザーが同時に

$ _SESSION配列がどのように機能するのか疑問に思っています。私のサイトを使用しているユーザーの数が多い場合、ユーザーごとにサブアレイを設定する必要がありますか?例えば今私は持っています

$_SESSION['userid'] = $userid;
$_SESSION['sessionid'] = $sessionid;
$_SESSION['ipaddress'] = $ipaddress;

しかし、より多くのユーザーに対応するには、多次元配列を作成する必要がありますか?

$_SESSION[$userid]['sessionid'] = $sessionid;
$_SESSION[$userid]['ipaddress'] = $ipaddress;

$ _SESSIONグローバルはクライアントごとに処理されますか、それとも全体的に処理されますか?ログイン時に$ _SESSION ['userid']を設定すると、前のユーザーが追い出され、最後にログインしたユーザーが元に戻りますか?

27
Abraham Brookes

いいえ。別のものがあります$_SESSIONユーザーごとに作成されます。これはすべてサーバーによって行われるので、心配する必要はありません。コードを書くときは、$_SESSIONサイトにユーザーが1人しかいないかのように。

編集:実際、それについて考える上で、尋ねるのは非常に良い質問です。この種の質問をするのは良いことです。つまり、コードが実際にどのように機能するかについて真剣に考えているということです。これらのことを尋ね続け、テストを続けてください。いつかあなたが驚くべきコードを書くことになると思います。

そのため、ここでは Apache サイトからの情報をいくつか示します。

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

セッションインターフェースの中核となるのは、ブラウザーの要求を通じてアクセスできるようにするキーと値のペアのテーブルです。これらのペアは、セッションを利用するアプリケーションの必要に応じて、任意の有効な文字列に設定できます。

サーバー上でセッションを維持する

Apacheは、特定のサーバーまたはサーバーのグループに格納されているユーザーごとのセッションを追跡するように構成できます。この機能は、一般的なアプリケーションサーバーで利用できるセッションに似ています。

構成されている場合、セッションは、Cookie内に保存されているセッションIDを使用して追跡されるか、通常のGETリクエストで見られるように、URLクエリ文字列に埋め込まれたパラメーターから抽出されます。

そして、セッションの PHP docs から:

PHPでのセッションサポートは、後続のアクセスにわたって特定のデータを保持する方法で構成されます。これにより、よりカスタマイズされたアプリケーションを構築し、Webサイトの魅力を高めることができます。

Webサイトにアクセスする訪問者には、一意のID、いわゆるセッションIDが割り当てられます。これは、ユーザー側のCookieに保存されるか、URLに伝達されます。

セッションのサポートにより、リクエスト間のデータを$ _SESSIONスーパーグローバル配列に保存できます。訪問者がサイトにアクセスすると、PHPは自動的に(session.auto_startが1に設定されている場合)、または要求に応じて(明示的にsession_start()または暗黙的にsession_register()を通じて)特定のかどうかを確認しますリクエストとともにセッションIDが送信されました。この場合、以前に保存された環境が再作成されます。

46
Fluffeh