1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [PHPセッション] 2 00:00:02,000 --> 00:00:04,000 [トミーM​​acWilliam、ハーバード大学] 3 00:00:04,000 --> 00:00:07,000 [これはCS50である。] [CS50.TV] 4 00:00:07,000 --> 00:00:10,920 PHPでのセッションは、機能を実装するために使用することができ、 5 00:00:10,920 --> 00:00:13,440 あなたのWeb​​アプリで、ユーザーのログイン、などである。 6 00:00:13,440 --> 00:00:16,920 PHPのセッションは、情報を関連付けることができます 7 00:00:16,920 --> 00:00:19,680 ユーザーの全体のブラウジングセッションに 8 00:00:19,680 --> 00:00:22,290 むしろ単純に単一のページより。 9 00:00:22,290 --> 00:00:27,330 ユーザーがあなたのウェブサイトを構成する様々なPHPページを訪問としてだから、意味 10 00:00:27,330 --> 00:00:30,630 セッション内のすべての情報が保持されます。 11 00:00:30,630 --> 00:00:34,770 その結果、つまり、1ページ分のセッションに格納されたデータ 12 00:00:34,770 --> 00:00:37,580 後で別のページからアクセスできます。 13 00:00:37,580 --> 00:00:40,080 セッションで情報を記憶するのは簡単です、 14 00:00:40,080 --> 00:00:48,790 そして我々は、アンダースコア、ドル記号を経由してその資本セッション変数を行う。 15 00:00:48,790 --> 00:00:52,620 ドル記号、アンダースコア、SESSION-だけでドル記号のように、アンダースコア、GET 16 00:00:52,620 --> 00:00:54,710 ドル記号、アンダースコア、ポスト 17 00:00:54,710 --> 00:00:58,690 キーと値のペアから成る連想配列です。 18 00:00:58,690 --> 00:01:07,980 だから我々は、セッションをアンダースコアの構文のようなドル記号を使用することができます 19 00:01:07,980 --> 00:01:16,000 ブラケット、引用符、狛犬、引用符、括弧、等しい、引用符、バー、引用、 20 00:01:16,000 --> 00:01:20,440 キーの値 "bar"を保存するための "foo" 21 00:01:20,440 --> 00:01:24,030 しかし、我々は、書き込みまたはセッションアレイから読み出される前に、 22 00:01:24,030 --> 00:01:26,770 我々は、特別な機能を呼び出す必要があります 23 00:01:26,770 --> 00:01:34,690 セッション開始、アンダースコア() - 24 00:01:34,690 --> 00:01:37,060 これは、セッションを初期化します。 25 00:01:37,060 --> 00:01:39,850 それでは、例を見てみましょう。 26 00:01:39,850 --> 00:01:46,570 私たちの最初のページには、hello.php、ユーザに出力するためにいくつかのデータをセッションを使用しています。 27 00:01:46,570 --> 00:01:53,920 覚えておいて、私たちはどんなセッションデータにアクセスする前に、我々はにsession_startを使用する必要があります。 28 00:01:53,920 --> 00:01:59,010 今、私たちは、キーが存在するかどうかを判断するためにPHPのかどうかの判断を使用している 29 00:01:59,010 --> 00:02:03,230 連想配列$ _SESSIONでの。 30 00:02:03,230 --> 00:02:07,250 そのキーが存在する場合、それは、ユーザがログインしたことを意味 31 00:02:07,250 --> 00:02:10,410 私たちは、ユーザーの名前が表示されます。 32 00:02:10,410 --> 00:02:14,110 そのキーが設定されていない場合、つまり、ユーザーがまだログインしていないことを意味 33 00:02:14,110 --> 00:02:17,880 私たちは、考えられる理由へのリンクを表示します。 34 00:02:17,880 --> 00:02:21,380 それでは、考えられる理由を見てみましょう。 35 00:02:21,380 --> 00:02:26,260 ダウンここでは、単一の入力を持つ単一のHTMLフォームを持っている。 36 00:02:26,260 --> 00:02:32,720 フォームのaction属性は、$ _SERVER ['PHP_SELF']は 37 00:02:32,720 --> 00:02:37,440 これは単純に、我々は、フォームが現在のファイルに提出したいことを意味します 38 00:02:37,440 --> 00:02:41,040 これ、この場合、考えられる理由である。 39 00:02:41,040 --> 00:02:43,010 それでは、このファイルの先頭に戻りましょう。 40 00:02:43,010 --> 00:02:50,100 ユーザーがフォームを送信した場合、$ _POST ['名前']に設定する必要があります。 41 00:02:50,100 --> 00:02:53,750 HTMLフォームとポストの詳細については、 42 00:02:53,750 --> 00:02:56,510 PHPのWeb開発のビデオをチェックしてください。 43 00:02:56,510 --> 00:02:59,330 ユーザーがフォームを送信しましたその場合、 44 00:02:59,330 --> 00:03:03,970 我々は、彼らがセッションに中に型指定された値を書きたいと思います。 45 00:03:03,970 --> 00:03:08,540 今、私たちはhello.phpにユーザーをリダイレクトすることができます。 46 00:03:08,540 --> 00:03:11,800 私たちがセッションにユーザーの入力を格納したので、 47 00:03:11,800 --> 00:03:18,240 hello.phpは考えられる理由で設定された値にアクセスすることができるであろう。 48 00:03:18,240 --> 00:03:21,010 それでは、これをWebブラウザで確認してみましょう。 49 00:03:21,010 --> 00:03:27,520 まず、http://localhost/hello.phpに移動します。 50 00:03:27,520 --> 00:03:30,220 我々は、我々はまだログインしていないことがわかります 51 00:03:30,220 --> 00:03:35,040 それでは、考えられる理由に私たちをリダイレクトするログインリンクをクリックしてみましょう。 52 00:03:35,040 --> 00:03:41,760 さて、私はその後のセッションで保存される、私の名前を入力します。 53 00:03:41,760 --> 00:03:48,950 すばらしい!今、私たちは、セッションを介してhello.phpに考えられる理由から、私の入力を見ることができます。 54 00:03:48,950 --> 00:03:52,270 だから、何をユーザーにログアウトはどうでしょうか? 55 00:03:52,270 --> 00:03:58,510 さて、ユーザをログインするために、我々は単純にセッション名に値を格納し。 56 00:03:58,510 --> 00:04:03,040 したがって、ユーザーをログアウトするには、我々は、単にその名前のキーを削除する必要があります 57 00:04:03,040 --> 00:04:05,040 セッション配列から。 58 00:04:05,040 --> 00:04:09,130 それでは、この最後のファイル、logout.phpを見てみましょう。 59 00:04:09,130 --> 00:04:12,080 もう一度、我々は()にsession_startを呼び出す必要があります 60 00:04:12,080 --> 00:04:15,260 我々は関連何でもセッションを行うことができます前に。 61 00:04:15,260 --> 00:04:19,240 今、私たちは)(するsession_destroyを簡単に呼び出すことができ、 62 00:04:19,240 --> 00:04:22,460 セッション内のすべてのデータを取り除くことの世話をするであろう 63 00:04:22,460 --> 00:04:26,790 そして再びhello.phpにユーザーをリダイレクトします。 64 00:04:26,790 --> 00:04:30,700 だから私は、ログアウトリンクをクリックすると、 65 00:04:30,700 --> 00:04:34,690 我々は、サーバーが私が誰を忘れていることがわかります、 66 00:04:34,690 --> 00:04:36,970 と私はもうログインしていない午前 67 00:04:36,970 --> 00:04:39,910 それでは、ボンネットの下に、ここで起こっているの? 68 00:04:39,910 --> 00:04:42,250 我々だけで見た動作を得るためには、 69 00:04:42,250 --> 00:04:44,760 当社のサーバーは2のことを行う必要がある。 70 00:04:44,760 --> 00:04:48,980 まず、サーバが何らかの形でセッションにデータを格納する必要がある。 71 00:04:48,980 --> 00:04:51,910 ウェブサイトを構成するさまざまなPHPファイル 72 00:04:51,910 --> 00:04:56,500 PHPインタプリタの個別の呼び出しとして実行される 73 00:04:56,500 --> 00:05:00,550 そのローカル変数は、それらの間で共有することはできません。 74 00:05:00,550 --> 00:05:04,030 代わりに、サーバは、我々のセッションデータを格納する必要がある 75 00:05:04,030 --> 00:05:08,440 いくつかの場所で複数の。phpファイルにアクセスすることができます。 76 00:05:08,440 --> 00:05:13,940 第二に、サーバーは私のブラウジングセッションでセッションデータを関連付ける必要があります。 77 00:05:13,940 --> 00:05:15,940 私はFacebookにログインする際に、 78 00:05:15,940 --> 00:05:20,460 また同時に、Facebookにログインして、他の何百万人もの人々は、おそらくあります。 79 00:05:20,460 --> 00:05:24,200 しかし、サーバが自分のデータを関連付ける方法が必要 80 00:05:24,200 --> 00:05:28,340 別のセッションで自分の現在のセッションや他の誰かのデータを持つ。 81 00:05:28,340 --> 00:05:32,380 幸いなことに、PHPの著者は、私たちのためにこれについてのすべてを考えた 82 00:05:32,380 --> 00:05:35,170 私たちは、この自分自身のいずれかを実装する必要はありません。 83 00:05:35,170 --> 00:05:39,540 しかし、ここではPHPは、デフォルトで何をするかを見てみましょう。 84 00:05:39,540 --> 00:05:44,070 私は初めてのsession_startを含むPHPページにアクセスすると、 85 00:05:44,070 --> 00:05:47,930 PHPは、大規模なランダムな値を生成します。 86 00:05:47,930 --> 00:05:53,970 するsession_destroyが呼び出さまたはされている私はしばらくの間、のために、そのサイト上の任意のPHPページを訪問しなくなるまで 87 00:05:53,970 --> 00:05:59,050 そのランダムおそらく一意な値を私に関連付けられます。 88 00:05:59,050 --> 00:06:02,780 そうすれば、サーバは、私のブラウジングセッションを特定するいくつかの方法がある 89 00:06:02,780 --> 00:06:05,710 誰か他の人とは対照的である。 90 00:06:05,710 --> 00:06:08,780 我々は現在のセッションIDを見てみることができます 91 00:06:08,780 --> 00:06:12,380 PHP関数、は、session_IDを使用。 92 00:06:12,380 --> 00:06:17,250 ここでは、単に私たちのセッション識別子の値を出力している。 93 00:06:17,250 --> 00:06:20,580 だから我々は再びサンプルWebアプリケーションにログインすると、 94 00:06:20,580 --> 00:06:25,530 そして今sessid.phpに移動して、 95 00:06:25,530 --> 00:06:27,850 我々は、文字のこの長い文字列が表示されます、 96 00:06:27,850 --> 00:06:31,180 それは、私のセッションの現在の識別子ですが、 97 00:06:31,180 --> 00:06:35,410 それは、サーバーが私が誰を追跡されている方法です。 98 00:06:35,410 --> 00:06:37,670 さて、我々は半分しか問題を解決しました。 99 00:06:37,670 --> 00:06:40,910 確かに、サーバーが今私を特定するいくつかの方法があり、 100 00:06:40,910 --> 00:06:46,060 私は別のページにアクセスしたときですが、サーバーは、同じIDを再利用する必要があります 101 00:06:46,060 --> 00:06:48,910 むしろ新しいものを生成するよりも。 102 00:06:48,910 --> 00:06:52,760 私ははFoo.phpでローカル変数を宣言すると、覚えている 103 00:06:52,760 --> 00:06:55,190 そして、Bar.phpが訪れる 104 00:06:55,190 --> 00:07:00,980 。というのもははFoo.phpに何が起こったのか知る方法がありません。 105 00:07:00,980 --> 00:07:07,450 だから、デフォルトのPHPセッションの実装では、ブラウザがサーバに思い出させることを要求する 106 00:07:07,450 --> 00:07:09,740 どのセッションIDを使用します。 107 00:07:09,740 --> 00:07:12,710 これは、クッキーの形で実装されています。 108 00:07:12,710 --> 00:07:15,370 クッキーでおいしいスナックであることに加え 109 00:07:15,370 --> 00:07:18,630 単にコンピュータ上の小さなテキストフ​​ァイルです。 110 00:07:18,630 --> 00:07:21,780 サーバーは、Webブラウザを介して書き込むことができる。 111 00:07:21,780 --> 00:07:27,300 だから、PHPはにsession_start経由で私のユニークなセッションIDを生成した後、 112 00:07:27,300 --> 00:07:34,210 それはローカルのテキストフ​​ァイル、またはクッキーでその識別子を格納するためにWebブラウザに指示するだろう。 113 00:07:34,210 --> 00:07:38,490 するとWebブラウザは、リクエストのたびにその識別子が含まれています 114 00:07:38,490 --> 00:07:40,780 それは、サーバーに対して行う。 115 00:07:40,780 --> 00:07:44,280 だから本当に、Webサーバーは、私が誰だ覚えていません。 116 00:07:44,280 --> 00:07:48,780 代わりに、ウェブブラウザは、単に一意の識別子を記憶されている 117 00:07:48,780 --> 00:07:52,730 それはPHPによって生成され、常にサーバーに思い出されました 118 00:07:52,730 --> 00:07:55,120 その識別子は何ですか。 119 00:07:55,120 --> 00:08:00,760 その方法は、私のユーザー名などの情報はサーバではない私のウェブブラウザに保存されます。 120 00:08:00,760 --> 00:08:05,190 ブラウザは、単純に、PHPはその情報を格納し、サーバーに指示します 121 00:08:05,190 --> 00:08:07,750 そのPHPはそれを取得することができます。 122 00:08:07,750 --> 00:08:12,150 だから、PHPは、実際にこの情報を格納している質問を、頼む? 123 00:08:12,150 --> 00:08:14,910 デフォルトでは、PHPはあなたのセッションデータを保存する 124 00:08:14,910 --> 00:08:19,540 / tmpディレクトリ、または「TEMP」フォルダ内のファイルにある。 125 00:08:19,540 --> 00:08:24,450 PHPが判断できるように、そのファイルの名前にはセッションIDが含まれます 126 00:08:24,450 --> 00:08:28,620 どのファイル読み込み、セッションIDのみを経由してから書き込んでください。 127 00:08:28,620 --> 00:08:32,280 わかりました。それでは、Chromeのデバッガで、[ネットワーク]タブを開いてみましょう 128 00:08:32,280 --> 00:08:34,890 右上のレンチアイコンから。 129 00:08:34,890 --> 00:08:38,409 今度は、再びhello.phpに頭みましょう。 130 00:08:38,409 --> 00:08:42,270 hello.phpにHTTPリクエストをクリックしてみましょう 131 00:08:42,270 --> 00:08:44,680 して、ヘッダーをクリックしてください。 132 00:08:44,680 --> 00:08:50,390 ここでは、CookieヘッダがPHPSESSIDというキーが含まれていることがわかります 133 00:08:50,390 --> 00:08:55,980 またはPHPのセッションID付き我々が見たものと同じ長さの文字列となる値 134 00:08:55,980 --> 00:08:59,290 我々はsessid.phpを訪問したとき。 135 00:08:59,290 --> 00:09:04,660 これは、ブラウザが使用されるべきか、セッションIDをサーバーに思い出させている正確にどのようにである。 136 00:09:04,660 --> 00:09:08,180 これは、HTTPヘッダに含めるだ。 137 00:09:08,180 --> 00:09:10,500 わかりました。それではターミナルに引き​​返すましょう。 138 00:09:10,500 --> 00:09:16,450 それでは、PHPはデフォルトでセッション情報を保存している/ tmpに、に移動してみましょう。 139 00:09:16,450 --> 00:09:19,160 案の定、この一時フォルダの内部を、 140 00:09:19,160 --> 00:09:23,550 ここでは同じ正確なセッションIDが含まれているファイルです。 141 00:09:23,550 --> 00:09:28,990 我々は、このファイルを開く場合は、PHPは、ディスク上の私のセッションを表しているかを見ることができます。 142 00:09:28,990 --> 00:09:32,870 ここでは文字列 "トミー" '名前'キーに格納されている 143 00:09:32,870 --> 00:09:35,750 その我々が期待していたまさにです。 144 00:09:35,750 --> 00:09:38,850 そして、それは、PHPのセッションの概要です。 145 00:09:38,850 --> 00:09:42,590 私たちがちょうど見たことのセッションのみデフォルトの実装だった。 146 00:09:42,590 --> 00:09:45,600 実際には、多くのウェブサイトは、このデフォルトの動作を変更 147 00:09:45,600 --> 00:09:48,280 より効率的にPHPのセッションを保存する 148 00:09:48,280 --> 00:09:50,390 パフォーマンスを向上させるための。 149 00:09:50,390 --> 00:09:52,800 私の名前はトミーであり、これはCS50である。 150 00:09:52,800 --> 00:09:56,000 [CS50.TV]