2014-02-26 307 views
0

通过几种解决方案搜索,其中没有一个似乎适用于我。像这样的大多数解决方案:HERE似乎指向使用:会话,cookies,共享子域

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

我要么不理解后或执行不当。我有以下的域,并通过domain.com

domain.com 
sub.domain.com 

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

登录我有session_start();在我的index.php页上sub.domain.com

当我在domain.com我var_dump($_SESSION);我得到一个返回值。 当我尝试它在sub.domain.com我得到array(0) { }

我也试过把代码放在sub.domain.com的最顶端,但仍然没有得到。

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

很清楚我做错了什么,但我不知道是什么。 谢谢。

回答

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. 

所以,你需要调用的方法为每个请求。

+0

我没有访问我的php.ini文件,所以我试过选项2我做了一个var_dump($ _ COOKIE);在domain.com和sub.domain.com上,我得到2个独立的PHPSESSID。我得到:[“PHPSESSID”] =>字符串(32)“326a307069e831007f6e38cfbf4ea826” on sub.domain.com我得到:[“PHPSESSID”] =>字符串(32)“bbdacebb93944e7794da593b208e7a54” – Guage

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中通过的index.php访问在domain.com上,我没有将代码添加到index.php - 登录位于/index.php?script=login

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

希望它可以帮助别人。