会话,cookie,在子域上共享

时间:2014-02-26 00:58:10

标签: php session cookies

通过一些解决方案进行搜索,这些解决方案似乎都不适用于我。像这样的大多数解决方案:HERE似乎指向使用:

session_set_cookie_params(0, '/', '.domain.com');
session_start();

我要么不理解帖子,要么执行不正确。我有以下域名并通过domain.com登录

domain.com
sub.domain.com 

我在domain.com上的login.php生活的顶部实现了上面的代码 登录后我设置$_SESSION[id] = xyz;

我在sub.domain.com上的index.php页面顶部有session_start();

当我在domain.com上var_dump($_SESSION);时,我获得了返回的值。 当我在sub.domain.com上尝试时,我得到array(0) { }

我也尝试将下面的代码放在sub.domain.com的顶部,但仍然没有得到任何结果。

session_set_cookie_params(0, '/', '.domain.com');
session_start();

显然我做错了什么,但我不知道是什么。 感谢。

2 个答案:

答案 0 :(得分:1)

1,一种方法是配置你的php.ini文件,如下所示:

session.cookie_domain = .domain.com

2,其次是使用ini_set();

ini_set('session.cookie_domain', '.domain.com');

3,第三个是使用session_set_cookie_params(),你的错误就在这里。有关它的详细信息,请看:http://php.net/manual/en/function.session-set-cookie-params.php

The effect of this function only lasts for the duration of the script. Thus, you need to call session_set_cookie_params() for every request and before session_start() is called. 

所以,您需要为每个请求调用该方法。

答案 1 :(得分:0)

我想解释一下为我解决了什么问题。使用“session.cookie_domain”是唯一对我有用的方法。

我有3个文件:

login.php     - in domain.com  
user_home.php - in domain.com

sub_index.php - in sub.domain.com

我将以下代码添加到每个文件的顶部,没有任何解决方法:

ini_set('session.cookie_domain', '.domain.com');
session_start();

原因是因为login.php是通过domain.com上的index.php访问的,我没有将代码添加到index.php - 登录位于/index.php?script=login

一旦我将代码包含在所有相关文件的顶部,var_dump($ _ COOKIE)在domain.com和sub.domain.com上显示PHPSESSID的相同值

希望它可以帮助别人。