Cookie 域名相关

Cookie 域名相关

cookie无法设置除当前域名或者其父域名之外的其他domain.
这个是浏览器出于对cookie的保护造成的,也就是cookie无法跨域设置。
对于子域名也有如下规则,当前域名只能设置当前域名以及他的父域名,不能设置子域名,如在 www.wo.cao.baidu.com 域名下只能设置 cao.baidu.com, baidu.com 不能设置 da.jia.wo.cao.baidu.com 的 cookie。

cookie 参数详解

js设置cookie

document.cookie - String
document.cookie = 'user=currentUser;expire=36000;path=/;domain=www.test.wangsd.com'

cookie参数

| 参数 Param | 类型 Type | 是否必填 Required | 描述 Description |
| :---- | :---- | :---- |
| name | String | 必需 | 规定 cookie 的名称 |
| value | Any(String) | 必需 | 规定 cookie 的值 |
| expire | Integer(毫秒) | 可选 | 规定 cookie 的有效期 |
| path | String | 可选 | 规定 cookie 的服务器路径 |
| domain | String | 可选 | 规定 cookie 的域名 |
| secure | [0,1] | 可选 | 规定是否通过安全的 HTTPS 连接来传输 cookie |

  • 第一个:name,必选参数,这个是cookie的变量名

  • 第二:value,可选参数,这个cookie变量的值

  • 第三个:expire,可选参数,这个是用来设置cookie变量保存的时间,注意是我们设置的的UNIX时间戳减去当前的UNIX时间戳才是cookie变量保存的时间。(UNIX时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数),一般我们可以通过time()函数获取当前的UNIX时间戳,再加上我们要保存的时间(单位为秒)比如说,setcookie(“user”,”php”,time()+3600),这样我们就可以保存user这个cookie变量的时间为3600秒。另外我们可以通过设置的时间戳小于当前的时间戳来删除cookie变量,比如说setcookie(“user”,”php”,time()-1)这样我们就删除了user这个cookie变量了。

  • 第四个:path,cookie的有效范围,这个参数是下一个参数domain基础上的有效范围,如果path设置为”/”,那就是在整个domain都有效,比如setcookie(“user”,”php”,time()+3600,”/”),这样我们domain下的任何目录,任何文件都可以通过 C O O K I E [ ′ u s e r ′ ] 来 调 用 这 个 c o o k i e 变 量 的 值 。 如 果 p a t h 设 置 为 ” / t e s t ” , 那 么 只 在 d o m a i n 下 的 / t e s t 目 录 及 子 目 录 才 有 效 , 比 如 d o m a i n 下 有 两 个 目 录 : t e s t 1 , t e s t 2 , 我 们 设 置 为 s e t c o o k i e ( “ u s e r ” , ” p h p , t i m e ( ) + 3600 , ” / t e s t 1 ″ ) , 那 么 只 有 t e s t 1 目 录 下 才 能 通 过 _COOKIE['user']来调用这个cookie变量的值。如果path设置为”/test”,那么只在domain下的/test目录及子目录才有效,比如domain下有两个目录:test1,test2,我们设置为setcookie(“user”,”php,time()+3600,”/test1″),那么只有test1目录下才能通过 COOKIE[user]cookiepath/test,domain/testdomain:test1,test2,setcookie(user,php,time()+3600,/test1)test1_COOKIE[‘user’]调用user这个cookie变量的值,test2目录下获取不到。

  • 第五个:domain,cookie有效的域名,如果domain,设置为googlephp.cn,那么在googlephp.cn下的所有子域都有效。假设googlephp.cn有两个子域,php.googlephp.cn,css.googlephp.cn,我们设置为setcookie(“user”,”php”,time()+3600,”/”,”php.googlephp.cn”),那么只有在php.googlephp.cn这个子域下才能获取user这个cookie变量的值.再举一个例子:setcookie(“user”,”php”,time()+3600,”/test”,”php.googlephp.cn”),那么只有在php.googlephp.cn这个子域下的test目录下才能获取user这个cookie变量的值.

  • 第六个:secure,值cookie是否仅通过安全的https,值为0或1,如果值为1,则cookie只能在https连接上有效,默认值为0,表示cookei在http和https连接上都有效。

cookie domain 域名设置详解

现在有如下3个域名,一个顶级域名、一个二级域名和一个三级域名:

  • zydya.com
  • blog.zyday.com
  • one.blog.zyday.com

√ 表示该域名下能取到cookie,×表示不能取到cookie

1.首先在zyday.com域名下设置cookie,做四次测试,分别设置domain参数为空、‘zyday.com’、‘blog.zyday.com’与’one.blog.zyday.com’。

domain参数zydya.comblog.zyday.comone.blog.zyday.com
setcookie(‘name’,1,time()+1)
setcookie(‘name’,1,time()+1,’/’,‘zyday.com’)
setcookie(‘name’,1,time()+1,’/’,‘blog.zyday.com’)×××
setcookie(‘name’,1,time()+1,’/’,‘one.blog.zyday.com’)×××

当domain设置为空时,domain默认为当前域名,并且该域名下的子域名都可以接收到cookie。
但是domain参数设置其子域名时,所有域名就接收不到了,包括那个子域名。

2.然后在blog.zyday.com域名下设置cookie,测试条件同上

domain参数zydya.comblog.zyday.comone.blog.zyday.com
setcookie(‘name’,1,time()+1)×
setcookie(‘name’,1,time()+1,’/’,‘zyday.com’)
setcookie(‘name’,1,time()+1,’/’,‘blog.zyday.com’)×
setcookie(‘name’,1,time()+1,’/’,one.blog.zyday.com’)×××

看第二行,domain参数是zyday.com,是blog.zyday.com的父域名,那么zyday.com下所有子域名(包括zyday.com、blog.zyday.com、one.blog.zyday.com)都能接收到cookie。
当domain为自身域名时,那么其父域名受影响,其本身与其子域名可以接收到cookie。
而设置其子域名或其他域名时,所有域名都接收不到cookie了。

3.最后在one.blog.zyday.com域名下设置cookie

domain参数zydya.comblog.zyday.comone.blog.zyday.com
setcookie(‘name’,1,time()+1)××
setcookie(‘name’,1,time()+1,’/’,‘zyday.com’)
setcookie(‘name’,1,time()+1,’/’,‘blog.zyday.com’)×
setcookie(‘name’,1,time()+1,’/’,one.blog.zyday.com’)××

总结: 可以获取当前域的父域下的cookie,并在父域设置cookie,但是不能获取当前域名子域的cookie,也不能在子域设置cookie。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iWangsd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值