[Powered by Google Translate] [PHP的会话]
[汤米MacWilliam，哈佛大学]
[这是CS50。] [CS50.TV]
在PHP会话可以被用来实现功能
如用户登录，在您的Web应用程序。
PHP会话让你的信息相关联
与用户的整个浏览会话
而不是简单的单页。
因此，这意味着当用户访问不同的PHP页面，使您的网站，
在会话中的任何信息将持续存在。
因此，这意味着，通过一个页面存储在会话中的数据
以后可以通过其他页面被访问。
在一个会话中存储的信息是容易的，
我们通过美元符号这么做，下划线，资本SESSION变量。
美元符号，下划线，SESSION-就像美元符号，下划线，GET
和美元符号，下划线，后期
是一个关联数组组成的键值对。
所以我们可以使用语法类似美元符号，下划线，会议，
支架，报价，富，报价，支架，等于，报价，酒吧，报价，
存储的关键值“栏中的”“富”。
然而，我们才可以写入或从会话阵列读，
我们需要调用一个特殊的函数，
会议强调，启动，（） -
这将初始化会话。
因此，让我们来看看一个例子。
我们的第一个页面，hello.php的，使用该会话来输出一些数据给用户。
请记住，我们需要使用在session_start才可以访问任何会话数据。
现在，我们正在使用PHP的使用isset，以确定是否存在密钥
在$ _SESSION关联数组中。
如果该键存在，这意味着用户已登录，
所以我们会显示用户的名称。
如果该键没有被设置，这意味着用户已经尚未登录，
所以我们会显示一个链接到的login.php。
因此，让我们来看看login.php中。
到这里，我们有一个单输入一个HTML表单。
表单的action属性是$ _SERVER ['PHP_SELF']，
而这仅仅意味着我们想要的形式提交到当前文件，
其中，在这种情况下，是login.php中。
因此，让我们回到这个文件的顶部。
如果用户提交了表单，那么$ _POST ['名称']必须设置。
有关HTML表单和岗位的详细信息，
检查出的PHP Web开发视频。
在用户没有提交表单的情况下，
我们想编写自己键入到会话中的价值。
现在，我们可以重定向到的hello.php用户。
因为我们已经存储了用户的输入到会话中，
的hello.php将能够访问被设置在login.php中的值。
因此，让我们看看这个在Web浏览器。
首先，我们将导航到http://localhost/hello.php。
在这里我们可以看到，我们尚未登入，
所以让我们单击登录链接，这将重定向我们的login.php。
好吧，我输入我的名字，然后将存储在会话中。
太棒了！现在，我们可以看到我的输入从login.php中的hello.php的通过了会议。
那么，怎么样注销用户？
好吧，为了将用户登录，我们简单地存储一个值到会话名称。
因此，要注销用户，我们只需要删除该名称密钥
从会话数组。
因此，让我们来看看这最后一个文件，logout.php。
再次，我们需要调用session_start（）
之前，我们可以做任何事情会话相关。
现在，我们可以简单地调用session_destroy（），
这将需要摆脱会话中的所有数据的照顾
然后将用户重定向回的hello.php。
所以，如果我点击注销链接，
我们可以看到，该服务器已经忘记了我是谁，
而我不再登录。
所以，这是怎么回事引擎盖底下？
为了得到我们刚才看到的行为，
我们的服务器需要做两件事情。
首先，服务器需要以某种方式在会话中存储的数据。
构成一个网站的不同的PHP文件
作为PHP解释器的单独调用执行
所以局部变量不能在它们之间共享。
相反，服务器需要存储我们的数据会话
在一些地方，多。php文件可以访问。
其次，服务器需要会话数据，只有我的浏览会话相关联。
当我登录到Facebook，
有可能是数以百万计的其他人也登录到Facebook的在同一时间。
但服务器需要我的关联数据的一些方法
我目前的工作阶段，并与另一个会话别人的数据。
幸运的是，PHP的作者想过这一切对我们来说，
所以我们不需要实现任何的这个自己。
但是，让我们来看看什么是PHP的默认操作。
当我访问包含在session_start第一次一个PHP页面，
PHP将产生大量的随机值。
直到session_destroy被称为或我不访问该网站上的所有PHP网页了一会儿，
该随机，可能唯一的值会跟我联系。
这样，该服务器具有识别我的浏览会话的一些方法
而不是别人的。
我们可以看看在当前的会话ID
使用PHP函数，SESSION_ID。
在这里，我们只是简单地输出我们的会话标识符的值。
因此，如果我们再登录到该示例Web应用程序，
现在导航到sessid.php，
我们将看到此字符长的字符串，
这就是目前的标识符我的会议，
这就是服务器如何跟踪我是谁。
好吧，但我们只解决了问题的一半。
当然，服务器现在已经确定我的一些方法，
但是当我访问另一个页面时，服务器需要重复使用相同的标识符
而不是生成一个新的。
请记住，如果我在foo.php声明一个局部变量
然后参观bar.php，
bar.php没有办法知道发生了什么事在foo.php的。
所以默认的PHP会话实现，浏览器必须提醒服务器
其中会话ID使用。
这是在cookie的形式来实现。
一个cookie，除了是美味小吃
只是你的计算机上的小文本文件
一个服务器可以通过Web浏览器写入。
所以在PHP通过在session_start产生我唯一的会话ID，
它会告诉Web浏览器来存储标识符在本地文本文件，或一个cookie。
然后，Web浏览器将包含该标识符在每个请求
它使服务器。
所以，真正的web服务器不记得我是谁。
取而代之的是，web浏览器被简单地记住的唯一标识符
这是由PHP生成，然后不断提醒服务器
那是什么标识符。
这样一来，信息，比如我的用户名存储在服务器不是我的Web浏览器上。
浏览器只是告诉PHP在哪里存储这些信息的服务器
所以PHP可以检索它。
所以这引出了一个问题，在这里是PHP的实际存储这些信息？
默认情况下，PHP将保存您的会话数据
在/ tmp目录，或“临时”文件夹内的文件。
该文件的名称包括会话ID，以便PHP可以判断
该文件的读取和从仅通过会话ID写​​。
好的。因此，让我们在Chrome的调试器打开网络选项卡
通过右上角的扳手图标。
现在，让我们头再次的hello.php。
让我们点击HTTP请求的hello.php
然后点击标头。
在这里，我们可以看到，该cookie头中包含一个名为PHPSESSID键，
或PHP的会话ID-使用一个值，我们看到了同样长的字符串
当我们参观sessid.php。
这究竟是如何在浏览器提醒哪些会话ID应该被使用的服务器。
它包括它在HTTP头中。
好的。让我们头回终端。
让我们浏览到/ tmp，其中PHP默认情况下，存储会话信息。
果然，这个临时文件夹里面，
这里包含完全相同的会话ID的文件。
如果我们打开这个文件，我们可以看到PHP是代表我在磁盘上的会话。
这里字符串“汤米”被存储为键'的名字，'
这正是我们所期待的。
这就是在PHP会话的概述。
我们刚才看到的是会话的唯一的默认实现。
事实上，很多网站更改此默认行为
为更有效地存储PHP会话
在提高性能的利益。
我的名字是汤米，这是CS50。
[CS50.TV]