当我们浏览Internet时,Cookie遍布我们的日常生活。大多数人对这些信息知之甚少,如果不是因为那些自GDPR以来现在几乎在任何页面上的“我们的网站使用Cookie进行操作”的标志。Cookies的历史悠久,有时有时好,有时不好。与世界上大多数地方一样,可以以良好或不良的方式使用此技术。
在本教程中,我们将从服务器端编程的角度探讨cookie:我们将在PHP中创建示例cookie,并将访问者选择的用户名存储在其中。Cookie将驻留在访问者的浏览器中,因此在下一次访问时,我们可以读取它并使用它来欢迎访问者提交的用户名。只要浏览器中存在cookie,我们的简单网页就可以识别访问者。我们不会在服务器端存储任何信息:如果访问者首先是从PC上签到,而下次是从智能手机上签到,我们将不会知道它是同一个人。这是cookie的要点之一:我们只能识别给定的客户端,并且只有在特定浏览器提供数据的情况下才能识别。
在本教程中,您将学习:
如何设置测试环境
如何编写一个使用Cookie的简单示例程序
如何测试程序的工作原理
如何重置环境
一、设置
我们的测试环境包括一个Apache Web服务器,其中加载了PHP模块。在我们的设置中,我们使用Ubuntu 20.04 LTS,但是任何最新发行版都可以。在Ubuntu上,我们需要的是apache2和php:
$sudo apt-get install apache2
$sudo apt-get install php
我们还需要运行网络服务器才能使用浏览器访问示例页面:
$sudo systemctl restart apache2
我们还需要启用Cookie的最新浏览器。本教程使用最新的Firefox。如果您具有Noscript之类的扩展名,请在测试时禁用它或从测试Web服务器启用cookie。
二、代码
考虑以下示例PHP页面的源代码:
<?php
$cookie_name = "username";
$ask_to_store = false;
$username = "Unknown Visitor";
if (!isset($_COOKIE[$cookie_name])) {
if (!isset($_REQUEST['uname'])) {
$ask_to_store = true;
} else {
$username = $_REQUEST['uname'];
setcookie($cookie_name, $username);
}
} else {
$username = $_COOKIE[$cookie_name];
}
echo "<html>n<body>n";
echo "<h1>Welcome, " . $username . "!</h1>n";
if ($ask_to_store) {
echo "<p>If you would like to set the username so we can greet you by that, enter it to the below form, and submit your request.</p>n";
echo "<form method="post">n";
echo "<input type="text" name="uname"/>n";
echo "<input type="submit"/>n";
echo "</form>n";
} else {
echo "<p>We are happy we can greet you by name.</p>n";
}
?>
</body>
</html>
我们将此代码放入名为的文件中page_with_cookies.php,并将其放置在测试Web服务器的php目录中。因此,我们将能够通过指定URL的浏览器访问它,如下所示:http://<webserver's address>/php/page_with_cookies.php。我们将在以下步骤中看到此代码的作用。
三、了解网页的工作方式
下一步是检查页面是否正确加载。我们将浏览器指向页面,然后出现一个简单的表单。192.168.1.2是测试环境中Web服务器的IP地址,如果您正在执行此操作,则应将其更改为放置此代码的服务器的地址或DNS名称。
首次访问时,该页面不会知道我们是谁,因此它将称呼我们为“未知访问者”。我们在代码部分第4行指定了这个名称,并且由于浏览器中还没有cookie,因此实际用户名不会覆盖该变量的值。我们在第6行检测到没有cookie设置,也没有保存访问者提交的实际用户名的请求(第7行)。这是我们显示允许访问者提交用户名的表单的状态。这是由第8行的布尔变量指定的。
现在,我们可以填写表单提供的输入字段(由代码行16-21生成)。在此示例中,我们将使用“ Foo Bar”。
点击提交后,页面会以我们发送的用户名打招呼。
到目前为止,这还不是最神奇的,我们已经读取了在POST请求中发送的数据,相应地设置了用户名,并使用它来问候访问者。但是我们还设置了一个cookie(第11行),它存储浏览器中给出的数据。如果我们再次打开页面(这是另一个请求,在这里我们没有发布任何用户名信息),我们也会看到前面设置的用户名,只要cookie还在浏览器中。支持提交用户名的表单也不会显示在新页面上,因为我们是第16行if语句的“false”分支。
三、如何重置环境
要清除浏览器的状态,我们可以从其中删除cookie。在Firefox 74.0中可以找到它的参数->隐私和安全-> Cookies和网站数据->管理数据。
然后我们搜索测试webserver的IP地址,因为我们是通过IP地址访问站点的。点击“删除选择”,然后点击“保存更改”,我们就完成了将网站放置在浏览器中的cookie的删除。
如果果我们再次访问该页面,将显示最原始的匿名问候语,表单将提交一个用户名。该网站没有存储任何数据,没有cookie,它不知道我们是谁。
本文旨在让您了解cookie是如何工作的。我们可以将信息存储在访问者的浏览器中,以标识浏览我们站点的客户机的给定实例。设置它们很简单,但是有很多限制需要考虑:如果用户清除了cookie,或者根本不接受它们,基于它们的功能就会崩溃。另一件需要记住的重要事情是cookie是与浏览器实例绑定的,因此如果同一个用户在同一台计算机上打开另一个浏览器,比如Chrome,那么放置在Firefox中的cookie将不会被看到。
注意:现在服务器报价出炉,价格很低
1、腾讯云:限时 2860 元无门槛代金券:点击一键领取。
2、腾讯云最新优惠活动,3年/5年服务器限时抢购:点击前往。
3、阿里云:限时 2000 元无门槛代金券:点击一键领取。