PHP提供了Cookie表,用以存储常规的 HTTP请求 中的客户端的信息,比如 用户名、购物车订单和购买的商品等。当用户在浏览器中访问网站时,Cookie表会通过HTTP响应的头部信息发送到浏览器,然后它会被存储在用户的计算机中,这些信息可以在用户下一次再次访问相同的网站时被提取和使用。
下面的代码片段演示了如何设置一个Cookie:
setcookie("username", "John Smith", time()+3600);
在这个例子中,setcookie() 函数设置了一个名称为“username”的cookie,它的值为“John Smith”。time()+3600 指定cookie的过期时间,在这个例子中设为1小时。
从上面的片段中可以发现,cookie是通过创建名值对来设置的,所以要发送多个 cookie,可以重复多次调用setcookie()函数。例如:setcookie("username", "John Smith", time()+3600);
setcookie("shopping_cart", "product_id_123,product_id_456", time()+3600);
setcookie("language", "zh-CN", time()+3600);
在这个片段中,setcookie()函数调用三次。第一个cookie名称是“username”,内容是“John Smith”,在1小时后过期。第二个cookie名称是“shopping_cart”,内容是“product_id_123,product_id_456”,同样在1小时后过期。 第三个cookie名称是“language”,内容是“zh-CN”,同样在1小时后过期。
然而,设置cookie并不总是成功的,有时会遇到一些问题,比如已经在输出页面内容之后设置cookie,或是在同一个脚本中尝试设置和使用cookie,还有一些到目前为止无法预见的问题。解决这些问题的方法有很多,例如:// 方法一
if (headers_sent()) {
echo "不幸的是,Cookie不能被设置!";
} else {
setcookie("shopping_cart", "product_id_123,product_id_456", time()+3600);
}
// 方法二
$action = basename($_SERVER['PHP_SELF']);
if (isset($_COOKIE['username'])) {
echo "欢迎回来,".$_COOKIE['username']."!
";
} else {
if ($action != "login.php") {
header('Location: login.php');
}
}
在上面的代码示例中,方法一进行了一个单独的错误检查,因为当数据已经发送到客户端浏览器时,PHP会拒绝设置cookie。在方法二中,服务器对cookie的使用进行了检查,如果它不存在,客户端就会被重定向到登录页面。
另外需要提醒的一点是,虽然cookie是方便的用于存储小数据的,但是在存储一些敏感和私有信息时应该谨慎。因为在cookie中存储的信息是明文传输的,所以攻击者可以通过一些方法拦截和窃取这些信息,从而导致安全漏洞。所以,如果想在cookie中存储敏感信息,应该对其进行加密。
在总结一下,cookie表是一个重要的概念,用于存储有关客户端的小数据。使用setcookie()函数可以方便地设置cookie,但有时不会成功,需要谨慎。最后一点需要注意,为了防止安全问题,需要考虑对cookie中存储的敏感信息进行加密保护。