1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [PHP的会话] 2 00:00:02,000 --> 00:00:04,000 [汤米MacWilliam,哈佛大学] 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 因此,这意味着,通过一个页面存储在会话中的数据 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 我们通过美元符号这么做,下划线,资本SESSION变量。 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 存储的关键值“栏中的”“富”。 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的使用isset,以确定是否存在密钥 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 所以我们会显示一个链接到的login.php。 34 00:02:17,880 --> 00:02:21,380 因此,让我们来看看login.php中。 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 其中,在这种情况下,是login.php中。 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将能够访问被设置在login.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 所以让我们单击登录链接,这将重定向我们的login.php。 52 00:03:35,040 --> 00:03:41,760 好吧,我输入我的名字,然后将存储在会话中。 53 00:03:41,760 --> 00:03:48,950 太棒了!现在,我们可以看到我的输入从login.php中的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 我们的服务器需要做两件事情。 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 但是当我访问另一个页面时,服务器需要重复使用相同的标识符 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 bar.php没有办法知道发生了什么事在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 这是在cookie的形式来实现。 108 00:07:12,710 --> 00:07:15,370 一个cookie,除了是美味小吃 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浏览器来存储标识符在本地文本文件,或一个cookie。 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 取而代之的是,web浏览器被简单地记住的唯一标识符 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 这样一来,信息,比如我的用户名存储在服务器不是我的Web浏览器上。 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目录,或“临时”文件夹内的文件。 125 00:08:19,540 --> 00:08:24,450 该文件的名称包括会话ID,以便PHP可以判断 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 让我们点击HTTP请求的hello.php 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 让我们浏览到/ tmp,其中PHP默认情况下,存储会话信息。 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]