PHP Cookie
cookie 常用于识别用户。
Cookie 是什么?
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内, 下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。 Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等, 服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。
注意事项:
1. 不同的电脑无法共享Cookie
2. 同一台电脑中的不同的浏览器也无法共享Cookie
3. 同一个浏览器不同的域名下还是无法共享Cookie
4. 甚至同一个浏览器、同一个域名下,不同路径的Cookie也无法实现共享
如何创建 Cookie?
通过 setcookie() 函数来创建一个 cookie ,成功返回 TRUE ,否则返回 FALSE 。
注释:setcookie() 函数必须位于 <html> 标签之前。
语法
setcookie(name, value, expire, path, domain);
参数说明:
参数 说明
name cookie 名称
value 可选,cookie 值
expire 可选,过期时间,时间戳格式
path 可选,服务器端有效路径,/ 表示整个域名有效,默认为当前设置 cookie 时页面的路径
domain 可选,该 cookie 有效的域名
实例 1
在下面的例子中,我们将创建名为 "user" 的 cookie,并为它赋值 "php"。我们也规定了此 cookie 在一小时后过期:
<?php setcookie("user", "php", time()+3600); ?>
<html>
.....
注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。
实例 2
您还可以通过另一种方式设置 cookie 的过期时间。这也许比使用秒表示的方式简单。
<?php $expire=time()+60*60*24*30; setcookie("user", "php", $expire); ?>
<html>
.....
在上面的实例中,过期时间被设置为一个月(60 秒 * 60 分 * 24 小时 * 30 天)。
如何取回 Cookie 的值?
PHP 的 $_COOKIE 变量用于取回 cookie 的值。
在下面的实例中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:
<?php
// 输出 cookie 值
echo $_COOKIE["user"];
// 查看所有 cookie
print_r($_COOKIE);
?>
在下面的实例中,我们使用 isset() 函数来确认是否已设置了 cookie:
<html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <?php if (isset($_COOKIE["user"])) echo "欢迎 " . $_COOKIE["user"] . "!<br>"; else echo "普通访客!<br>"; ?> </body> </html>
如何删除 Cookie?
可以通过设置 cookie 过期时间为以前的时间点来删除一个 cookie :
删除的实例:
<?php // 设置 cookie 过期时间为过去 1 小时 setcookie("user", "", time()-3600); ?>
提示:
由于协议限制,在设置 cookie 之前,不能有任何内容向浏览器输出
cookie 不会在设置的当前页生效,要访问设置的 cookie ,必须是另一个页面在过期之前访问
由于 cookie 信息存储于用户的计算机中,那么就有可能伪造 cookie 从而造成 cookie 欺骗, 一般可以对 cookie 的值进行加密来预防欺骗。读取 cookie 的时候,对 cookie 解密即可
如果浏览器不支持 Cookie 该怎么办?
如果您的应用程序需要与不支持 cookie 的浏览器打交道,那么您不得不使用其他的办法在您的应用程序中的页面之间传递信息。 一种方式是通过表单传递数据(有关表单和用户输入的内容,在本教程的前面章节中我们已经介绍过了)。
下面的表单在用户单点击 "Submit" 按钮时,向 "welcome.php" 提交了用户输入:
<html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <form action="welcome.php" method="post"> 名字: <input type="text" name="name"> 年龄: <input type="text" name="age"> <input type="submit"> </form> </body> </html>
取回 "welcome.php" 文件中的值,如下所示:
<html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> 欢迎 <?php echo $_POST["name"]; ?>.<br> 你 <?php echo $_POST["age"]; ?> 岁了。 </body> </html>
Cookie的限制问题
很多浏览器对Cookie的数量是有限制的,大多数浏览器规定一个网站可以设置的Cookie数量是不可以超过50个的, 部分浏览器甚至限制为30个
浏览器对Cookie的尺寸也有限制,一般不得超过4K大小
Cookie的安全问题
如果在网吧上网后没有关机,其他人使用你的电脑后是可以查看到你访问的所有的网站历史记录以及网站保存的Cookie内容的, 如果重要的数据(用户名、密码、卡号、手机号、身份证号……)保存在Cookie中是非常危险的行为。
因此,重要数据不能存放在Cookie里,如果一定要保存还是得靠服务器