PHPセッションはどのように機能しますか?(「使用方法」ではありません)


127

セッションファイルは通常、たとえば/tmp/サーバーに保存され、という名前が付けられsess_{session_id}ます。私は中身を見ていましたが、実際にどのように機能するのか理解できません。

ファイルから変数名とコンテンツを取得するのは簡単です。しかし、PHPはどのセッションが誰のものかをどのようにして知るのでしょうか?

session_idは完全にランダムに見え、1つのIPアドレスに複数のユーザーが存在する可能性があり、複数のブラウザーウィンドウを開いている場合は、各ユーザーに複数のセッションが存在する可能性があります。

それはどのように機能するのでしょうか?


回答:


202

一般的な状況では:

  • セッションが作成されると、セッションIDがユーザーに送信されます。
  • Cookieに保存されます(デフォルトではと呼ばれますPHPSESSID
  • そのクッキーは、リクエストごとにブラウザからサーバーに送信されます
  • サーバー(PHP)は、session_idを含むCookieを使用して、そのユーザーに対応するファイルを認識します。

セッションファイル内のデータは、の内容で$_SESSION連載、(つまり、文字列として表現-のような機能を持つシリアル化)の内容です。また、PHPによってファイルが読み込まれると、シリアル化されず、$_SESSION配列に入力されます。


時々、セッションIDはCookieに保存されず、URLで送信されることもありますが、最近では、これは非常にまれです。


詳細については、セッション処理をご覧ください。は、このマニュアルのセクションをご覧ください。役立つ情報がいくつか記載されています。

たとえば、セッションIDの受け渡しに関するページがあり、セッションIDがページ間でCookieを使用して、またはURLでどのように受け渡されるか、およびどの設定オプションがこれに影響するかが説明されています。


5
(ネイティブアプリからの)モバイルデバイスはどのようにセッションを正常に処理しますか?セッションIDを保存しますか?それともOAuthが登場したのですか?
アダムウェイト2013

13

PHPセッションの仕組み

  • 最初に、PHPはa86b10aeb5cd56434f8691799b1d9360個々のセッションに対して16バイトの長い一意の識別子番号(32桁の16進文字列として格納されるなど)を作成します。

  • PHPSESSID Cookieは、その一意の識別番号をユーザーのブラウザに渡して、その番号を保存します。

  • 新しいファイルは、sess_接頭辞(つまりsess_a86b10aeb5cd56434f8691799b1d9360。)が付いた一意の識別番号と同じ名前でサーバー上に作成されます。

  • ブラウザは、リクエストごとにそのCookieをサーバーに送信します。

  • PHPがその一意の識別番号をPHPSESSID Cookieから(リクエストごとに)取得した場合、PHPは一時ディレクトリを検索し、その番号をファイル名と比較します。両方が同じ場合は、既存のセッションを取得します。それ以外の場合は、そのユーザーの新しいセッションを作成します。

ユーザーがブラウザを閉じるか、サイトを離れると、セッションは破棄されます。また、サーバーは、所定のセッション時間が経過した後にセッションを終了します。これらは、PHPがセッションの処理に使用している簡単なメカニズムのステップです。この記事が、PHP SESSIONの動作を理解するのに役立つことを願っています。

詳細については、この記事を参照してください。PHPセッションのしくみ


しかし、私が特定のサイトにログインしている場合(別名:セッション中)、新しいタブを開きますmysite.com/cart。「Hello Joe Doe、5つのメッセージ、これがショッピングカートのリストです...」という別名のセッション情報も受け取ります。–しかし、この空白のタブに関するブラウザは、GET-RequestとともにSession-IDを送信するのはなぜですか?クイックアップデート:ああ、答えが見つかりました:+)
フランクノッケ2018

セッションIDがどのようにセキュリティを提供できるかを尋ねることはできますか?
Andrewboy

4

セッションIDは実際にはランダムであり、構成に応じてCookieまたはURLで渡されます。このPHPSESSID = xxxxを一部のURLですでに見たことがあるかもしれません。その名前のCookieもあります。


2

PHPのセッションは、session_start()関数を使用して開始されます。setcookie()関数と同様に、session_start()関数は、ページ上の空白行を含むHTMLの前に配置する必要があります。これは次のようになります <?php session_start( );?><html><head> 。....... etc session_start()関数はランダムなセッションIDを生成し、ユーザーのコンピューターのCookieに保存します(これは実際にクライアント側に保存される唯一のセッション情報です)。 )Cookieのデフォルト名はPHPSESSIDですが、これはサーバーのPHP構成ファイルで変更できます(ただし、ほとんどのホスティング会社はそのままにします。)したがって、PHPコードでセッションIDを参照するには、変数$ PHPSESSID(これはCookie名です。Cookieから覚えていますか?)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.