我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

关于phpcookie设置问题,可以使用setcookie函数以及header函数输出cookie。那么,对比可知,两者在使用方式上,是有一定的区别的。在本文中,我们将继续讨论这个话题。php如何使用header设置cookie?在使用过程中有什么注意实现?

苏南大叔:php如何使用header设置cookie?有什么注意事项? - php-header-cookie
php如何使用header设置cookie?有什么注意事项?(图3-1)

问题描述

我们知道,php的setcookie和header都可以设置cookie。但是使用header的时候,还有个注意事项:那就是header和setcookie之间的先后顺序,甚至header和header之间的先后顺序。

header("Set-Cookie:")会清除掉:本语句调用之前的,所有的header("Set-Cookie:")和setcookie(setrawcookie)的效果。见下面的例子,设置了四个cookie。但是实际上只有一个生效。因为另外三个被最后一个给冲掉了。

header("Set-Cookie:cookie_name1_cp=" . urlencode("浏览器关闭失效"));
setcookie("cookie_name1", "浏览器关闭失效");

setcookie("cookie_name3", "设置有效域名/https/httponly", time() + 3600*24, "/", $_SERVER['SERVER_NAME'], isset($_SERVER["HTTPS"]),true);
header("Set-Cookie:cookie_name3_cp=" . urlencode("设置有效域名/https/httponly") . "; expires=" . gmstrftime("%a, %d-%b-%Y %H:%M:%S GMT", time() + 3600*24) . "; Max-Age=3600; path=/; domain= ".$_SERVER['SERVER_NAME']."; httponly");

苏南大叔:php如何使用header设置cookie?有什么注意事项? - 002
php如何使用header设置cookie?有什么注意事项?(图3-2)

解决方案一

都使用setcookie函数来控制,那必是极好的,setcookie函数不会相互冲突。即使重名,只要重要信息不同,也是可以同时存在的。(也就是说,重名的话,存在替换的可能性,具体见后续文章)。

setcookie("cookie_name1", "浏览器关闭失效");
setcookie("cookie_name1", "设置有效域名/https/httponly", time() + 3600*24, "/", $_SERVER['SERVER_NAME'], isset($_SERVER["HTTPS"]),true);

苏南大叔:php如何使用header设置cookie?有什么注意事项? - 004
php如何使用header设置cookie?有什么注意事项?(图3-3)

解决方案二

为header增加第二个参数,false。就是说:

header("Set-Cookie:xxxxxxxxxxxxxxxx",false);

例如:

header("Set-Cookie:cookie_name3_cp=" . urlencode("设置有效域名/https/httponly") . "; expires=" . gmstrftime("%a, %d-%b-%Y %H:%M:%S GMT", time() + 3600*24) . "; Max-Age=3600; path=/; domain= ".$_SERVER['SERVER_NAME']."; httponly;");
header("Set-Cookie:cookie_name3_cp2=" . urlencode("设置有效域名/https/httponly") . "; expires=" . gmstrftime("%a, %d-%b-%Y %H:%M:%S GMT", time() + 3600*24) . "; Max-Age=3600; path=/; domain= ".$_SERVER['SERVER_NAME']."; httponly;",FALSE);

这样的话,使用了false参数的header就不会冲突掉原有的了。
具体可以参见header的php函数说明:

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

我们的false,设置的就是参数$replace,就是不替换已有同类型header的意思。注意是“同类型”。

结语

cookie是十分巧妙的小物件,就是通过它,让服务器有能力去鉴别浏览者身份。所以,在黑客界,才有偷cookie这个说法,拿到了cookie,即使没有密码,一样可以以你的身份去做你能做的事情。是不是很可怕?

更多cookie相关信息,请继续关注苏南大叔的文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    cookie