[Powered by Google Translate] [PHPセッション]
[トミーM​​acWilliam、ハーバード大学]
[これはCS50である。] [CS50.TV]
PHPでのセッションは、機能を実装するために使用することができ、
あなたのWeb​​アプリで、ユーザーのログイン、などである。
PHPのセッションは、情報を関連付けることができます
ユーザーの全体のブラウジングセッションに
むしろ単純に単一のページより。
ユーザーがあなたのウェブサイトを構成する様々なPHPページを訪問としてだから、意味
セッション内のすべての情報が保持されます。
その結果、つまり、1ページ分のセッションに格納されたデータ
後で別のページからアクセスできます。
セッションで情報を記憶するのは簡単です、
そして我々は、アンダースコア、ドル記号を経由してその資本セッション変数を行う。
ドル記号、アンダースコア、SESSION-だけでドル記号のように、アンダースコア、GET
ドル記号、アンダースコア、ポスト
キーと値のペアから成る連想配列です。
だから我々は、セッションをアンダースコアの構文のようなドル記号を使用することができます
ブラケット、引用符、狛犬、引用符、括弧、等しい、引用符、バー、引用、
キーの値 "bar"を保存するための "foo"
しかし、我々は、書き込みまたはセッションアレイから読み出される前に、
我々は、特別な機能を呼び出す必要があります
セッション開始、アンダースコア（） -
これは、セッションを初期化します。
それでは、例を見てみましょう。
私たちの最初のページには、hello.php、ユーザに出力するためにいくつかのデータをセッションを使用しています。
覚えておいて、私たちはどんなセッションデータにアクセスする前に、我々はにsession_startを使用する必要があります。
今、私たちは、キーが存在するかどうかを判断するためにPHPのかどうかの判断を使用している
連想配列$ _SESSIONでの。
そのキーが存在する場合、それは、ユーザがログインしたことを意味
私たちは、ユーザーの名前が表示されます。
そのキーが設定されていない場合、つまり、ユーザーがまだログインしていないことを意味
私たちは、考えられる理由へのリンクを表示します。
それでは、考えられる理由を見てみましょう。
ダウンここでは、単一の入力を持つ単一のHTMLフォームを持っている。
フォームのaction属性は、$ _SERVER ['PHP_SELF']は
これは単純に、我々は、フォームが現在のファイルに提出したいことを意味します
これ、この場合、考えられる理由である。
それでは、このファイルの先頭に戻りましょう。
ユーザーがフォームを送信した場合、$ _POST ['名前']に設定する必要があります。
HTMLフォームとポストの詳細については、
PHPのWeb開発のビデオをチェックしてください。
ユーザーがフォームを送信しましたその場合、
我々は、彼らがセッションに中に型指定された値を書きたいと思います。
今、私たちはhello.phpにユーザーをリダイレクトすることができます。
私たちがセッションにユーザーの入力を格納したので、
hello.phpは考えられる理由で設定された値にアクセスすることができるであろう。
それでは、これをWebブラウザで確認してみましょう。
まず、http://localhost/hello.phpに移動します。
我々は、我々はまだログインしていないことがわかります
それでは、考えられる理由に私たちをリダイレクトするログインリンクをクリックしてみましょう。
さて、私はその後のセッションで保存される、私の名前を入力します。
すばらしい！今、私たちは、セッションを介してhello.phpに考えられる理由から、私の入力を見ることができます。
だから、何をユーザーにログアウトはどうでしょうか？
さて、ユーザをログインするために、我々は単純にセッション名に値を格納し。
したがって、ユーザーをログアウトするには、我々は、単にその名前のキーを削除する必要があります
セッション配列から。
それでは、この最後のファイル、logout.phpを見てみましょう。
もう一度、我々は（）にsession_startを呼び出す必要があります
我々は関連何でもセッションを行うことができます前に。
今、私たちは）（するsession_destroyを簡単に呼び出すことができ、
セッション内のすべてのデータを取り除くことの世話をするであろう
そして再びhello.phpにユーザーをリダイレクトします。
だから私は、ログアウトリンクをクリックすると、
我々は、サーバーが私が誰を忘れていることがわかります、
と私はもうログインしていない午前
それでは、ボンネットの下に、ここで起こっているの？
我々だけで見た動作を得るためには、
当社のサーバーは2のことを行う必要がある。
まず、サーバが何らかの形でセッションにデータを格納する必要がある。
ウェブサイトを構成するさまざまなPHPファイル
PHPインタプリタの個別の呼び出しとして実行される
そのローカル変数は、それらの間で共有することはできません。
代わりに、サーバは、我々のセッションデータを格納する必要がある
いくつかの場所で複数の。phpファイルにアクセスすることができます。
第二に、サーバーは私のブラウジングセッションでセッションデータを関連付ける必要があります。
私はFacebookにログインする際に、
また同時に、Facebookにログインして、他の何百万人もの人々は、おそらくあります。
しかし、サーバが自分のデータを関連付ける方法が必要
別のセッションで自分の現在のセッションや他の誰かのデータを持つ。
幸いなことに、PHPの著者は、私たちのためにこれについてのすべてを考えた
私たちは、この自分自身のいずれかを実装する必要はありません。
しかし、ここではPHPは、デフォルトで何をするかを見てみましょう。
私は初めてのsession_startを含むPHPページにアクセスすると、
PHPは、大規模なランダムな値を生成します。
するsession_destroyが呼び出さまたはされている私はしばらくの間、のために、そのサイト上の任意のPHPページを訪問しなくなるまで
そのランダムおそらく一意な値を私に関連付けられます。
そうすれば、サーバは、私のブラウジングセッションを特定するいくつかの方法がある
誰か他の人とは対照的である。
我々は現在のセッションIDを見てみることができます
PHP関数、は、session_IDを使用。
ここでは、単に私たちのセッション識別子の値を出力している。
だから我々は再びサンプルWebアプリケーションにログインすると、
そして今sessid.phpに移動して、
我々は、文字のこの長い文字列が表示されます、
それは、私のセッションの現在の識別子ですが、
それは、サーバーが私が誰を追跡されている方法です。
さて、我々は半分しか問題を解決しました。
確かに、サーバーが今私を特定するいくつかの方法があり、
私は別のページにアクセスしたときですが、サーバーは、同じIDを再利用する必要があります
むしろ新しいものを生成するよりも。
私ははFoo.phpでローカル変数を宣言すると、覚えている
そして、Bar.phpが訪れる
。というのもははFoo.phpに何が起こったのか知る方法がありません。
だから、デフォルトのPHPセッションの実装では、ブラウザがサーバに思い出させることを要求する
どのセッションIDを使用します。
これは、クッキーの形で実装されています。
クッキーでおいしいスナックであることに加え
単にコンピュータ上の小さなテキストフ​​ァイルです。
サーバーは、Webブラウザを介して書き込むことができる。
だから、PHPはにsession_start経由で私のユニークなセッションIDを生成した後、
それはローカルのテキストフ​​ァイル、またはクッキーでその識別子を格納するためにWebブラウザに指示するだろう。
するとWebブラウザは、リクエストのたびにその識別子が含まれています
それは、サーバーに対して行う。
だから本当に、Webサーバーは、私が誰だ覚えていません。
代わりに、ウェブブラウザは、単に一意の識別子を記憶されている
それはPHPによって生成され、常にサーバーに思い出されました
その識別子は何ですか。
その方法は、私のユーザー名などの情報はサーバではない私のウェブブラウザに保存されます。
ブラウザは、単純に、PHPはその情報を格納し、サーバーに指示します
そのPHPはそれを取得することができます。
だから、PHPは、実際にこの情報を格納している質問を、頼む？
デフォルトでは、PHPはあなたのセッションデータを保存する
/ tmpディレクトリ、または「TEMP」フォルダ内のファイルにある。
PHPが判断できるように、そのファイルの名前にはセッションIDが含まれます
どのファイル読み込み、セッションIDのみを経由してから書き込んでください。
わかりました。それでは、Chromeのデバッガで、[ネットワーク]タブを開いてみましょう
右上のレンチアイコンから。
今度は、再びhello.phpに頭みましょう。
hello.phpにHTTPリクエストをクリックしてみましょう
して、ヘッダーをクリックしてください。
ここでは、CookieヘッダがPHPSESSIDというキーが含まれていることがわかります
またはPHPのセッションID付き我々が見たものと同じ長さの文字列となる値
我々はsessid.phpを訪問したとき。
これは、ブラウザが使用されるべきか、セッションIDをサーバーに思い出させている正確にどのようにである。
これは、HTTPヘッダに含めるだ。
わかりました。それではターミナルに引き​​返すましょう。
それでは、PHPはデフォルトでセッション情報を保存している/ tmpに、に移動してみましょう。
案の定、この一時フォルダの内部を、
ここでは同じ正確なセッションIDが含まれているファイルです。
我々は、このファイルを開く場合は、PHPは、ディスク上の私のセッションを表しているかを見ることができます。
ここでは文字列 "トミー" '名前'キーに格納されている
その我々が期待していたまさにです。
そして、それは、PHPのセッションの概要です。
私たちがちょうど見たことのセッションのみデフォルトの実装だった。
実際には、多くのウェブサイトは、このデフォルトの動作を変更
より効率的にPHPのセッションを保存する
パフォーマンスを向上させるための。
私の名前はトミーであり、これはCS50である。
[CS50.TV]