php setcookie中path和domain怎么设置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php setcookie中path和domain怎么设置相关的知识,希望对你有一定的参考价值。
我有2个页面
页面1
<?
setcookie('state','in',time()+3600,'/abc','localhost');
?>
页面2
<?
echo $_COOKIE['state'];
?>
页面1位于根目录下,页面2位于根目录下abc文件夹下
测试过程:依次运行页面1和页面2
为什么在执行页面2的时候会提示错误,就是Cookie未设置的错误
是不是我的域名和路径填错了?应该怎么控制域名和路径的Cookie
setcookie函数原型如下:
bool setcookie(string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]])其中name为cookie的名字,value为cookie的值,expire为过期时间的秒级时间戳(默认为0,代表内存cookie,关闭浏览器即失效)
path为cookie的路径,浏览器在发送cookie是只会发送对应路径及祖先级路径的cookie,如cookieA设置在根下,cookieB设置在/dir/下,访问dir的请求会带着cookieB和cookieA,但访问根路径的请求只会带着cookieA
domain为cookie的域名,只能设置为当前域或当前域的上级域。例如,一个在a.b.com的页面,可以设置domain为a.b.com,b.com,设置为a.b.com只能在a.b.com中访问cookie,若直接设置为b.com,则可以在其他b.com域下访问
secure为true会对cookie进行HTTPS加密传输
httponly为true时,只能通过请求发送cookie,使用javascript无法读取httponly的cookie,安全性更高
参考技术A domain和path是可选的, 全部不填写的话, 是当前域名的全路径可用. 你重新看下setcookie的文档.你参数个数写错了吧. 你是想同时定义state和in吗? 不能这样写.追问你告诉我怎么写
我想设置一个cookie
name = state
value = in
有效时间1小时
只在localhost/abc下有效
不行 依然错误
确定浏览器开启了cookie
我不知道你的虚拟主机是怎么配置的,
我的是work文件夹为主机的根目录,work文件夹下1.php文件setcookie('state','in',time()+3600,'/abc','localhost');
,work/abc下的2.php就可以获取cookie了
啊,这是什么情况
我用的wamp,默认安装,没有做过什么修改
应该要配置什么项目呢
你使用firebug吗,在运行1.php之后,可以在firebug中的cookies中查看一下state这个cookie存在不
追问短标签模式设置过了,错误提示是没有对应索引,也就是cookie没有生效
追答你是用的google chrome吗,如果是,那问题出在localhost上,你换成127.0.0.1,另外,你使用火狐等其他浏览器试试,我是用的火狐,没有问题,这是个老问题了,chrome上only set domain cookies for registry controlled domains,比如.com、.so后缀的,不能设置内网主机,比如localhost,如果你是liunx系统,可以在/etc/hosts中设置127.0.0.1 localhost.com
追问非常感谢,终于成功了,果然是浏览器的问题,用火狐就可以,IE 360 google都不行
看来想用路径来区别cookie的作用范围有点不靠谱呀
php setcookie 域
【中文标题】php setcookie 域【英文标题】:php setcookie domain 【发布时间】:2011-01-18 02:32:39 【问题描述】:一些不是我编写的应用程序,也不是用 PHP 编写的,它为域“www.domain.com”创建了一个 cookie。
我正在尝试替换该 cookie。所以在php中我做了:
setcookie('mycookie','mydata',time() + 2*7*24*60*60,'/','www.domain.com', false);
但是,生成的 cookie 是为域创建的:“.www.domain.com”,请注意点“.”领先于领域。
所以它不会替换它,它会创建另一个 cookie。 我能做什么?
【问题讨论】:
www.domain.com
和 .www.domain.com
域(注意前导点)的处理方式相同,至少按照 RFC 6265,这是 每个 现代浏览器实现的。它表示前导点只是忽略。但是如果 cookie 没有成功地相互覆盖,这可能是由于属性“path”、“domain”、“secure”或“httpOnly”的不同,我们在这里看不到。一般来说,您可以尝试github.com/delight-im/PHP-Cookie 以更轻松地管理 cookie。
【参考方案1】:
这里也解决了这个问题: https://www.php.net/manual/en/function.setcookie.php
查看jah的评论:
如果要将 cookie 限制为单个主机,请将域参数提供为空字符串
您也可以尝试将.domain.com
作为域。尾随点将允许 domain.com
的所有子域的 cookie 并可能覆盖 www.
-cookie,但我将首先使用上述解决方案。
【讨论】:
我也在寻找这个问题的答案,果然,让域空白工作。谢谢。 请注意,如果您对域使用空字符串,您可能会发现某些浏览器会感到困惑。如果可以,请使用 getenv('HTTP_HOST')【参考方案2】:如果你指定一个域,你应该遵循 RFC 2109 并在域前加上一个点;否则客户会这样做。但是如果你根本不指定域,客户端将获取请求的域。
【讨论】:
此默认行为是否记录在某处? "如果服务器未指定 cookie 的域和路径属性,则它们默认为所请求资源的域和路径。"链接:en.wikipedia.org/wiki/HTTP_cookie#Domain_and_path【参考方案3】:这不是一个错误吗?
如果我希望我的 cookie 仅位于 www.example.com
而不是 something.www.example.com
怎么办?例如性能。
我应该能够指定 cookie 域而不是所有 [sub][sub] 子域的通配符。
更不用说它导致的错误数量,例如通过 php 设置 cookie 并尝试通过 JavaScript 删除它(这不会添加愚蠢的点)。
【讨论】:
【参考方案4】:尝试创建几个具有相同名称但域不同的其他 cookie。示例:
setcookie('mycookie','mydata1',time() + 2*7*24*60*60,'/','www.domain.com', false);
setcookie('mycookie','mydata2',time() + 2*7*24*60*60,'/','www.domain.com', false);
setcookie('mycookie_top','mydata1',time() + 2*7*24*60*60,'/','domain.com', false);
setcookie('mycookie_top','mydata2',time() + 2*7*24*60*60,'/','domain.com', false);
然后在 Firebug 中检查这些命令创建的 cookie。如果你一直得到一个双重cookie,那么这可能是PHP中的一个错误。另外,尝试在javascript代码中设置cookie,看看是否还有同样的问题。
【讨论】:
以上是关于php setcookie中path和domain怎么设置的主要内容,如果未能解决你的问题,请参考以下文章