PHP Cookie
本教程介绍了cookie的概念,并学习如何使用PHP cookie在web浏览器的请求之间维护web应用程序的状态。
cookie介绍
cookie是以文本格式存储在用户的web浏览器中的信息。
cookie以一个或多个名称-值对的形式存储,这些名称-值对可能出于隐私和安全目的进行了加密。
cookie也称为web cookie、HTTP cookie或浏览器cookie。
web服务器将cookie作为HTTP头的一部分发送到web浏览器。无论何时浏览器从web服务器请求页面,cookie都会在请求中被发送回web服务器,以便网站能够读取其中的信息并执行必要的任务,比如根据用户首选项进行个性化设置。
cookie允许您存储最多4KB的数据,这是一个非常小的数量。cookie有效期是固定的。您可以将cookie的过期时间从几秒设置为任意长时间。特别是,您可以设置当web浏览器关闭时cookie即过期。
大多数现代web浏览器允许用户选择是否接受cookie,因此您不应该完全依赖它来存储关键数据。此外,现代web浏览器允许您为每个惟一域存储至少20个cookie。
设置PHP Cookie
PHP中使用setcookie()函数可以使得处理cookie变得很容易。
<?php setcookie($name, $value, $expire, $path, $domain, $secure);
setcookie()函数中的参数:
- $name:cookie的名称
- $value:cookie的值。它可以是任何标量值,如字符串或整数。
- $expire:cookie过期的时间。如果未设置$expire,则当用户关闭web浏览器时,cookie将过期。
- $path:将返回cookie的web服务器上的路径。
- $domain:cookie将返回的域。
- $secure:true表示cookie是通过安全HTTP即HTTPS发送的。默认值为false。
让我们来看一个在PHP中设置cookie的例子。
<?php setcookie('user','itroad',time() + 3600);
请注意,cookie必须在脚本的任何输出之前发送。
PHP读取 Cookie
设置好cookie之后,可以使用$_COOKIE超全局数组读取它的值。在读取cookie的值之前,应该使用isset()函数检查cookie是否可用。
下面的例子演示了如何读取我们在上面例子中设置的cookie:
<?php if(isset($_COOKIE['user'])){ echo 'Welcome, '. $_COOKIE['user']. '!'; }
删除PHP Cookie
如果您不再需要您设置的cookie,您可以强制浏览器删除它。
但是,在PHP中没有直接删除cookie的函数。不过可以使用setcookie()函数来删除一个cookie:
- 将cookie的值参数设置为空。
- 将time参数设置为过期的值。
下面的示例通过将用户cookie的值重置为空同时将过期时间重置为过去的时间来删除用户cookie:
<?php if(isset($_COOKIE['user'])){ setcookie('user','', time()-3600); }
将代码整合在一起
在下面的示例中,我们使用cookie来显示web页面的页面视图,当页面视图数量达到10时,我们将其重置。
<?php define('MAX_PAGEVIEW',10); $msg = ''; // 如果还没有设置pageview cookie,则设置 if(!isset($_COOKIE['pageview'])){ setcookie('pageview',1,0,'/'); $msg = 'Welcome to my site!'; }else{ // 在cookie中读取pageview值 $pageview = (int)$_COOKIE['pageview']; $pageview +=1; if($pageview <= MAX_PAGEVIEW){ setcookie('pageview',$pageview,0,'/'); $msg = sprintf('Pageview #%d',$pageview); }else{ setcookie('pageview','',time() - 3600,'/'); $msg = 'Cookie has been removed!'; } } ?> <h1>Cookie 示例</h1> <?php echo $msg;