当我想设置会话cookie时,我遇到了一些非常奇怪的错误。
如果我使用以下规则:
session_set_cookie_params(0, '/', $_SERVER['HTTP_HOST'], false, true);
//$_SERVER['HTTP_HOST'] resolves into "jscripting.nl"
它总会放一个“。”在url的前面,它总是会使我的session_id可以在我的所有子域上访问,这是一个问题,因为我在我的一个子域上开发并且session_id可能会相互干扰。
我的服务器设置有问题吗?
答案 0 :(得分:2)
$_SERVER['HTTP_HOST']
与服务器设置无关,它来自客户端发出的请求的主机头。
如果要使用在服务器端配置的服务器名称,那么通常使用$_SERVER['SERVER_NAME']
,但在受some cases影响的主机标头中也是如此。
编辑:显然,域的任何值都将默认附加一个点,因此它将包含任何子域,并且唯一有效的方法是将其应用于当前域只是不设置参数或使用原始标头设置cookie。有关主题this thread的详情,请参阅此内容。
您可以通过在域名参数上设置null
来使cookie成为httponly,并且仍然可以使用它。