您可能听说过cookie,但它们到底是什么,我们可以用它们做什么?在本教程中,我们将重点介绍 cookie 的基础知识,并了解它们在各种 Web 应用程序和站点环境中的功能。我们还将学习如何在 php 中使用 cookie。
Cookie 与会话变量
不确定您是否需要 cookie 或会话变量?会话变量是一种将有关用户的数据存储在数据库中并稍后检索它的方法。Cookie 是一种在用户计算机上存储用户数据的方式。会话变量通常用于需要跟踪用户活动的应用程序。Cookie 通常用于需要为单个站点存储有关用户的信息的应用程序。
您还可以在我关于在 PHP 中使用会话变量的帖子中了解会话变量。
PHP 如何在 PHP Sajal Soni 中使用会话和会话变量
什么是 Cookie?
让我们从定义开始:
HTTP cookie(也称为网络 cookie、互联网 cookie、浏览器 cookie 或简称 cookie)是浏览网站时由网络浏览器存储在用户计算机上的一小段数据。
我们可以将 cookie 视为保存在您的计算机上的文本文件。当您请求任何网页时,Web 服务器会将该网页的响应发送到您的浏览器。除了响应之外,Web 服务器还可以发送Set-CookieHTTP 标头,请求您的浏览器在您的计算机上创建 cookie 文件。为网站创建 cookie 后,网络服务器随后可以从这些文件中读取和写入内容。
Cookie与 Cookie 数据一起具有到期日期。设置此日期是为了让浏览器可以在 Web 服务器不再需要旧 cookie 时删除它们。如果过期日期为空,则在关闭与服务器的连接时会删除 cookie。当用户关闭站点的窗口或选项卡,或者当用户关闭整个浏览器时,就会发生这种情况。这些 cookie 有时称为会话 cookie,主要用于存储临时设置。
让我们通过以下示例快速查看Set-cookieHTTP 标头的外观:
Set-Cookie: LastVisitedSection=CodeTutsplus; expires=Fri, 31-Mar-2021 23:59:59 GMT; path=/; domain=.www.weixiaolive.com
在上面的示例中,Web 服务器要求浏览器创建LastVisitedSectioncookie。浏览器将存储CodeTutsplus为 cookie 数据。cookie 文件可以存储最大为 4KB 的文本字符串或数字。
该expires属性用于指定到期日期。因此,LastVisitedSectioncookie 将在以下31-Mar-2021 23:59:59 GMT日期之后从您的计算机中删除:2021 年 3 月 31 日午夜。
domain 属性用于指定 cookie 将在其中处于活动状态的域。如果域是ads.google.com,cookie 将只发送到该域的服务器,如果域是.google.com,cookie 将发送到谷歌任何子域的任何服务器,包括google.com它自己。在我们的示例中,LastVisitedSectioncookie 也可用于www.weixiaolive.com任何子域www.weixiaolive.com。
path 是 cookie 发送到的域的路径。这意味着,如果路径设置为/images/,并且域设置为ads.google.com,则只有在浏览器请求来自 的文件时,cookie 才会发送到服务器ads.google.com/images/。如果路径设置为/,则无论请求文件在服务器上的位置如何,cookie 都将被发送到服务器。在我们的示例中,LastVisitedSectioncookie 将被发送到www.weixiaolive.com域的所有页面。
这就是网络服务器在您的计算机上创建 cookie 的方式。在下一节中,我们将讨论 cookie 的用途。
Cookie 的用途是什么?
HTTP 协议是无状态协议,这意味着服务器没有内置方式可以记住多个请求之间的特定用户。例如,当您访问一个网页时,服务器只负责提供所请求页面的内容。当您访问同一网站的其他页面时,Web 服务器会分别解释每个请求,就好像它们彼此无关一样。服务器无法知道每个请求都来自同一个用户。
现在,如果您想实现用户登录或购物车等功能,您需要确定两个请求是否来自同一个浏览器。这对于无状态协议是不可能的。我们需要维护浏览器发出的请求之间的状态或会话以识别用户。这就是饼干来救援的地方!
Cookie 允许您在单个站点或应用程序的不同页面之间共享信息,因此它们有助于维护状态。这让服务器知道所有请求都来自同一用户,从而允许站点显示用户特定的信息和偏好。
以下图表描述了 HTTP 协议如何与 cookie 一起工作。
如何在 PHP 中创建 Cookie
在本节中,我们将讨论如何在 PHP 中创建 cookie。
要在 PHP 中创建 cookie,您需要使用该setcookie函数。让我们看一下用于创建 cookie 的基本语法。
setcookie ( string $name , string $value = "" , int $expires = 0 , string $path = "" , string $domain = "" , bool $secure = false , bool $httponly = false );
函数中的参数列表setcookie对您来说应该很熟悉,因为我们已经在本文前面讨论了大多数这些参数。但是,还有两个参数,$secure和$httponly,理解起来很重要。
如果将$secure参数设置为TRUE,则仅当存在安全连接时才会创建 cookie。该$httponly参数允许您仅使 cookie 成为 HTTP,因此只能通过 HTTP 协议访问它。仅设置为 HTTP 的 Cookie 无法通过javascript等脚本语言访问。
语法就是这样——让我们看一个真实世界的例子。
<?phpsetcookie("LastVisitedSection", "CodeTutsplus", time() + 3600, "/", "www.weixiaolive.com", 1);
它将LastVisitedSection使用该值创建 cookie CodeTutsplus,并在一小时内过期。path 参数设置为/,因此它将被发送到www.weixiaolive.com域的所有页面。
现在,让我们看看下面的例子。
<?phpsetcookie("favCourse", "PHP", time() + 3600, "/courses/", "www.weixiaolive.com/en", 1);
由于我们将路径参数设置为/courses/,因此favCourse仅当浏览器请求来自 的页面时才会发送 cookie https://www.weixiaolive.com/en/courses/。
通过这种方式,您可以在 PHP 中创建 cookie。在 PHP 中创建 cookie 时要记住的最重要的事情是,您必须在向浏览器发送任何数据之前设置所有 cookie。Cookie 属于标头,因此您应该始终在任何输出之前初始化新的 cookie。这包括echoorprint命令和or标签。<html><body>
如何在 PHP 中读取 Cookie
在 PHP 中读取 cookie 很简单。您需要使用$_COOKIE超全局变量来读取可用的 cookie。实际上,该$_COOKIE变量是一个包含所有 cookie 的数组。
让我们看一下下面的代码片段。
<?php if(isset($_COOKIE["LastVisitedSection"])){ echo "Recently visited section: " . $_COOKIE["LastVisitedSection"]; } else{ echo "Welcome guest! We encourage you to explore different sections!"; }
您可以使用print_r或var_dump功能检查所有可用的 cookie 以进行调试。
<?php print_r($_COOKIE);
在 PHP 中读取 cookie 就是这么容易!
在下一节中,我们将了解如何删除 cookie。
如何在 PHP 中删除 Cookie
如果您知道您也可以使用该功能删除 cookie ,您会很感兴趣。setcookie问题是您需要将过期日期设置为过去,然后将删除 cookie。
让我们在下面的例子中看到它的作用。
<?php unset($_COOKIE['LastVisitedSection']); setcookie("LastVisitedSection", "", time() - 3600, "/");
如您所见,我们通过将过期日期设置为 来指定过去的过期日期time() - 3600。重要的是要注意,我们还使用该unset函数从超全局变量中删除LastVisitedSectioncookie,$_COOKIE以确保LastVisitedSection在代码中稍后无法访问 cookie。
在 PHP 中使用 Cookie 的最佳实践
最后,我想总结一些最佳实践:
切勿将敏感数据插入 cookie。客户可能正在公共计算机上浏览,所以不要留下任何个人信息。
永远不要相信来自 cookie 的数据。始终过滤字符串和数字!客户端计算机可以随意更改 cookie,因此攻击者可以将恶意数据写入 cookie 以执行您不希望您的服务执行的操作。
尝试估计 cookie 的有效期,并相应地设置到期日期。您不想用设置为一百年后过期的旧 cookie 占用客户端的计算机。
尽可能设置secure和httponly标志。如果您的应用程序不使用JavaScript编辑 cookie ,请启用httponly. 如果您始终有 HTTPS 连接,请启用secure. 这提高了数据的完整性和机密性。
结论
今天,我们讨论了 cookie 的基础知识以及如何在 PHP 中使用它们。
- Cookie 与会话变量