设置一个没有`domain`的cookie,但是使用`secure`和`httponly`

时间:2016-05-27 14:28:37

标签: php cookies

PHP的setcookie函数如下所示:

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

如您所见,domain没有标准值,但以下参数(httponlysecure)可以。

我希望最后一个参数都设置为true,但是没有指定要绑定cookie的域。这甚至可能吗?遗憾的是,PHP不允许这样的事情:

setcookie('name', 'value', time()+60, '/', $secure=true, $httponly=true);

另见this SO question with a similar problem。显然,我无法更改setcookie功能。

修改

domain参数设置为""null不起作用。

1 个答案:

答案 0 :(得分:0)

在我自己的开发服务器(PHP 7.3.4)上进行测试,并为域提交一个空字符串。提交 null 也可以,但是设置了 declare(strict_types = 1)后,PHP会生成一条消息,提示有关参数类型错误,需要字符串,提供了NULL。

例如:

setcookie('myCookie', 'myCookieData', 0, '/, '', true, true);

但不是

setcookie('myCookie', 'myCookieData', 0, '/, null, true, true);

但是, setcookie()允许将cookie选项作为数组提供。

例如:

setcookie('myCookie', 'myCookieData',['expires'=>0, 'path'=>'/', 'domain'=>'example.com', 'httponly'=>true, 'secure'=>true];

这允许将域从数组中省略,因此不会将其发送给客户端:

setcookie('myCookie', 'myCookieData',['expires'=>0, 'path'=>'/', 'httponly'=>true, 'secure'=>true];

PHP setcookie() page