什么是 Cookie
Cookie 能够让网页开发者将指定的资料储存到使用者的硬盘,在有需要时在客户端读取已储存的 cookie 资料。例如在建立电子商贸网站时,可以使用 cookie 记录使用者所选取的货品。
而 cookie 为了预防使用者的资料被泄,所以有以下限制:
— 每个浏览器最多只可储存 300 个 cookie
— 每个浏览器对每个网站只能储存 20 个 cookie
— 如果浏览器关闭了 cookie 功能,那就不能使用
Cookie 的实作
要在 PHP 内储存一个 cookie 给使用者,最简单的做法是:
setcookie(“cookie_name”, “cookie_value”);
以上的 cookie_name 是 cookie 的名称,cookie_value 是定义给 cookie 的值。
但用这方法所储存的 cookie,当使用者关闭浏览器后便会失效,以下几个例子会示范 setcookie 其他的用法:
Cookie 的有效时间为 1 小时
|
1 2 3 4 |
<?php setcookie("name", "PHP Developer Channel", time()+3600); echo $_COOKIE['name']; ?> |
设定成只有 /member/ 目录才可使用
|
1 2 3 4 |
<?php setcookie("name", "PHP Developer Channel", time()+3600, "/member/"); echo $_COOKIE['name']; ?> |
在 www.mydomain.com 的 /member/ 目录才有效,mydomain.com 则没有效
|
1 2 3 4 |
<?php setcookie("name", "PHP Developer Channel", time()+3600, "/member/", "www.mydomain.com"); echo $_COOKIE['name']; ?> |
如果是结合 HTTPS 安全协定(SSL),就需指定最后一个值
|
1 2 3 4 |
<?php setcookie("name", "PHP Developer Channel", time()+3600, "/member/", "www.mydomain.com", 1); echo $_COOKIE['name']; ?> |
常见问题
一般上使用 cookie 失败的原因是使用者关闭 cookie 功能,或者在使用 setcookie 前已输出内容给浏览器。
使用者关闭 cookie 功能很难避免,另一个问题则可在程式层面上解决。
在 PHP 内使用 header() 及 setcookie() 的函式时,需要在输出内容前使用,否则会出现 “Headers already sent” 错误, 以下是正确及错误的例子:
错误写法, 会出现 “Headers already sent”.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<html> <head> <?php setcookie("name", "PHP Developer Channel", time()+3600); ?> <title>Cookie Page</title> </head> <body> <?=$_COOKIE['name']?> </body> </html> ?> |
正确写法
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php setcookie("name", "PHP Developer Channel", time()+3600); ?> <html> <head> <title>Cookie Page</title> </head> <body> <?=$_COOKIE['name']?> </body> </html> ?> |