仅在www.website.tld和www.apps.website.tld上设置PHP会话


set php session on only www.website.tld and www.apps.website.tld

我只想要www.website.tld和www.apps.website.tld上的会话cookie,如果可能的话使用ini_set。此外,我需要设置我只写两个子域的所有cookie。我不想www.imgs.website.tld得到这些饼干。PHP会话我有点不确定。我的想法是调用SetBothCookie($name,$value,$time)一个自定义函数。

function SetBothCookie($name,$value,$time)
{
setcookie($name, $value, $time, "", "www.website.tld", 1);
setcookie($name, $value, $time, "", "www.apps.website.tld", 1);
}

所以我认为我有SetBothCookie部分下来,但想看看别人认为的代码。我卡住的部分是有php设置在两个子域的会话cookie。我使用session_set_save_handler来覆盖默认的php会话存储,以便在数据库中存储会话,这样两个服务器都可以使用相同的会话数据。从我的理解是,如果我把Javascript做http请求上www.apps.website.tld到www.website.tld它不会允许它们发生,我想要增加安全性,所以这是我的原因只运行在子域上的网站的一部分。

这个函数应该可以工作,但是…

根据PHP手册

使用set_cookie()中的secure参数

表示cookie只应该通过安全的HTTPS传输来自客户端的连接。当设置为TRUE时,将只设置cookie如果存在安全连接。在服务器端,由程序员来完成只发送这种cookie安全连接(如尊重)$ _SERVER["HTTPS"])。

所以我建议删除set_cookie()函数的第6个参数。

同样,您可以在任何输出之前调用此函数,否则它将抛出类似

的警告。

警告:不能修改标题信息-已发送的头(输出开始于…)in…在线XX

使用session_set_save_handler()是控制会话变量的好方法。

如果你想要整个域的cookie只是使用"/"".website.tld"(初始点根据RFC 2109标准)为domain参数(第5行)。参数path应该是""(空字符串;4日)。