PHP 中使用 Cookie 及 Cookie 的作用域

老牛浏览 372评论 0发表于
php
setcookie($name, $value, $expire, $path, $domain, $secure, $httponly)
  • $expire:过期时间,默认为 0,即会话结束时过期(也就是关闭浏览器)

  • $domain:Cookie 的有效域名(默认为空[自身],浏览器有跨域限制,可以设置父域名以及自身,但不能设置其它域名,包括子域名,否则 Cookie 不起作用)

php
$_COOKIE['name']

如果 Cookie不存在,会有一个 Notice,取值前可以先用 isset 判断。

php
setcookie('name','123',1); // 示例1
setcookie('name','123',time()-3600); // 示例2

即把过期时间设置为一个过去的时间,浏览器会自动删除该 Cookie。

setcookie 的 $domain 参数决定了 Cookie 的作用域,下面详细讨论一下。

现在有三个域名,一个一级域名,一个二级域名,一个三级域名:

  • niu.com

  • bbs.niu.com

  • img.bbs.niu.com

niu.com 域名下设置 Cookie,$domain 参数依次设置为空。

表示该域名下能获取到 Cookie,× 表示不能获取到 Cookie

domain 参数

niu.com

bbs.niu.com

img.bbs.niu.com

setcookie('name', 1, time() + 3600)

setcookie('name', 1, time() + 3600, '', 'niu.com')

setcookie('name', 1, time() + 3600, '', 'bbs.niu.com')

×

×

×

setcookie('name', 1, time() + 3600, '', 'img.bbs.niu.com')

×

×

×

bbs.niu.com 域名下设置 Cookie,$domain 参数依次设置为空。

表示该域名下能获取到 Cookie,× 表示不能获取到 Cookie

domain 参数

niu.com

bbs.niu.com

img.bbs.niu.com

setcookie('name', 1, time() + 3600)

×

setcookie('name', 1, time() + 3600, '', 'niu.com')

setcookie('name', 1, time() + 3600, '', 'bbs.niu.com')

×

setcookie('name', 1, time() + 3600, '', 'img.bbs.niu.com')

×

×

×

img.bbs.niu.com 域名下设置 Cookie,$domain 参数依次设置为空。

表示该域名下能获取到 Cookie,× 表示不能获取到 Cookie。

domain 参数

niu.com

bbs.niu.com

img.bbs.niu.com

setcookie('name', 1, time() + 3600)

×

×

setcookie('name', 1, time() + 3600, '', 'niu.com')

setcookie('name', 1, time() + 3600, '', 'bbs.niu.com')

×

setcookie('name', 1, time() + 3600, '', 'img.bbs.niu.com')

×

×

php
setcookie('name', 'value', time() + 3600, '', 'niu.com');

niu.com.niu.com 是一样的,在浏览器中 $domain 存储的形式为 .niu.com

结论:

  1. $domain 参数的设置,要注意两点:

    • 在 setcookie 中省略 $domain,$domain 默认为当前域名;

    • $domain 可以设置为父域名及自身,但不能设置为其他域名,包括子域名,否则 Cookie 不起作用。

  2. Cookie 的作用域:$domain 本身及其下的所有子域名。

点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于