帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何在PHP中使用cookie启用会话

如何在PHP中使用cookie启用会话

发布时间:2020年04月07日 09:29:31    来源: A5互联

当我们浏览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将不会被看到。