php系列之setcookie各个参数的作用详解

cookie是在响应头和请求头中设置键为Set-Cookie的键值对,php中主要通过setcookie函数对cookie进行操作,它接受7个参数,后面6个是可选参数:

1.name: cookie的名称,必选参数.

2.value: cookie的值,当未指定时会删除这个cookie.

举例:设置一个is_login为1的cookie,然后再删除:

<?php 
setcookie('is_login', 1);
?>

执行上面代码之后,服务器会向客户端发送创建cookie的指令,打开控制面板可以看到cookie已经存了进去:

然后执行以下代码删除这条cookie:

<?php 
setcookie('is_login');
?>

刷新界面可以看到这条cookie已被删除:

3.expire: cookie的过期时间,0或未指定时会默认当前会话为有效期,关闭浏览器后cookie会被清除,它接受时间戳格式.看一下下面的案例:设置一个会话期间有效的cookie: is_login和一个有效期一天的cookie: is_out:

<?php 
setcookie('is_login', 1);
setcookie('is_out', 1, time() + 24 * 60 * 60);
?>

执行上面代码,可以看到cookie已经存到客户端,奇了个怪的是,chrome浏览器会话时间显示为1969-12-31T23:59:59.000Z,但是不影响使用,可能是谷歌的特色吧:

ok,清除一下代码,把网页关掉再打开,阔以发现还是存在两个cookie:

看来一定要关闭浏览器才能结束当前会话,关闭浏览器再次打开本界面,可以看到基于上次会话有效的is_login已经么得了:

4.path: cookie的有效路径,当设置'/'时有效路径为根目录,所有根目录和子目录都可以访问;设置为'/header/'时是指只有根目录下的header文件夹中的网页和header下子目录的网页才能访问到.案例:

<?php 
setcookie('is_login', 1, 0, '/scripts/');
setcookie('is_out', 1);
?>

执行以上代码,设置is_login有效路径为根目录中scripts文件夹,设置is_out有效路径为默认的根目录.打开根目录下的一级网页:

发现只能看到is_out的cookie;打开scripts下的网页:

两个cookie都可以取到.

5.domain:cookie的有效域名.仅指定域名或其子域名可以访问到.案例:在同一个脚本中设置一个cookie有效域名为site1.dev,再设置一个cookie有效域名为www.site1.dev:

<?php 
setcookie('is_login', 1, 0, '/', 'site1.dev');
setcookie('is_out', 0, 0, '/', 'www.site1.dev');
?>

通过site1.dev打开网页:

发现只能看到is_login的cookie,而限制其子域名为有效路径的is_out则无法获取到,说明有效路径向上无效.打开www.site1.dev:

而www.site1.dev两个cookie都能看到,这说明有效路径向下同样有效,site1.dev的cookie:is_login,在其子域名www.site1.dev内同样能取到.我们再来试一下,如果我们再自己的网站中设置一下baidu.com等其他网站的cookie,在其它网站中能否访问得到呢?案例:在site1.dev的网页中设置site2.dev的cookie:

<?php
setcookie('is_login', 1, 0, '/', 'site2.dev');
?>

下面打开site2.dev,到底能否取到is_login的cookie呢,让我们拭目以待:

很明显不可以取到.如果能取到的话,估计整个互联网都乱套了吧0.0

6.secure: 设置是否仅在https连接的情况下才设置此cookie,true是,false否.

7.httponly: 是否只能通过http协议访问,是的话则无法在js中通过document.cookie访问,这个参数和上一个没有任何关系,大家不要混淆.案例:设置一个is_login的httponly为true,is_out的httponly为false,然后从浏览器控制台使用document.cookie打印:

<?php
setcookie('is_login', 1, 0, '/', 'site1.dev', false, true);
setcookie('is_out', 1, 0, '/', 'site1.dev', false, false);
?>

打开网页:

可以发现is_login的http一列打了一个√,我们在控制台打印一下document.cookie:

js中只能访问到is_out;而is_login由于设置了httponly,因此无法通过其它途径访问!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值