2013-03-25 76 views
0

我想要设置会话cookie时出现一些非常奇怪的错误。session_set_cookie_params()指向错误的域

如果我使用以下规则:“”

session_set_cookie_params(0, '/', $_SERVER['HTTP_HOST'], false, true); 
//$_SERVER['HTTP_HOST'] resolves into "jscripting.nl" 

它总是把一个在网址前面,它总是会让我的session_id在我的所有子域中都可以访问,这是我在我的子域中开发的一个问题,session_id可能会互相干扰。

有什么我做错了或是我的服务器设置有问题吗?

+0

取决于。你的$ _SERVER ['HTTP_HOST']是什么? – eis 2013-03-25 20:31:09

+0

显然只是没有设置域已经解决了我的问题,但我真的不想诉诸于此,因为我现在无法使会话cookie生效。如果有人有更好的解决方案,我会留下这个问题。 – 2013-03-25 21:58:10

回答

2

$_SERVER['HTTP_HOST']与服务器设置无关,它来自客户端请求的主机头。

如果要使用在服务器端配置的服务器名称,其实现方式通常是使用$_SERVER['SERVER_NAME'],但在some cases中也受到主机头的影响。

编辑:显然,域的任何值都会默认添加一个点,所以它将包含任何子域,唯一有效的方法是仅将它应用于当前域,而不设置参数或使用原始页眉设置cookie。有关此主题的更多信息,请参阅this thread

您可以通过在域名参数上设置null来使cookie更安全并且仍然适用于您的情况。

+0

我知道这个函数不应该为网址附加点,这就是我称之为奇怪错误的原因。即使当我只是输入一个字符串,它会附加一个点... – 2013-03-25 21:18:22

+0

@ J.Peters其实我错了,这就是函数编码做的。请参阅我添加的链接中的讨论 - 基本上,将域名具体化的方法是省略参数或使用原始标头调用来设置cookie。 – eis 2013-03-25 22:26:38

+0

如果我用一句话总结你的答案,我会说:使用'session_set_cookie_params(0,'/',null,false,true);'(用第三个参数中的空值替换手动设置的主机名原始示例) – 2013-03-25 22:31:29