2012-01-30 60 views
2

可能重复:
Allow php sessions to carry over to subdomains

复杂的类,但我已经得到了我想要通过侧跑边4个颠覆库我的本地主机进行测试。

我设置为php.ini这样:

session.cookie_domain = ".localhost.com" 

我安装我的hosts文件:

127.0.0.1 vader.localhost.com 
127.0.0.1 luke.localhost.com 

当我登录,它正确设置cookie。

Name: PHPSESSID 
Content: b0d3h7nh5ff40sms26q04oasq3 
Domain: .localhost.com 
    Path:/

我设置登录$ _SESSION变量:

$_SESSION['authorized'] = true; 

刷新页面,标题是正确的:

Cookie PHPSESSID=b0d3h7nh5ff40sms26q04oasq3 
Host vader.localhost.com 
Referer http://vader.localhost.com/ 

但$ _SESSION变量是空的。

这一切工作正常,如果我删除子域。

想法?

编辑:

了Suhosin未安装。

此外,有人问为会话设置的完整代码:

if (authenticate($dat['username'], $dat['password'])) { 
     session_start(); 
     $_SESSION['authorized'] = true; 
     $_SESSION['username'] = $dat['username']; 
     $_SESSION['userType'] = findId('t_user', 'username', $dat['username'], 'userTypeId'); 
     $_SESSION['userId'] = findId('t_user', 'username', $dat['username'], 'userId'); 
     $_SESSION['contactId'] = findId('t_user', 'username', $dat['username'], 'userContactId'); 
     array_push($reply, $reply); 
     $reply['authorized'] = true; 
    } 
+0

有没有可能发布更多的设置/读取会话的代码? – cmbuckley 2012-01-30 21:31:00

+0

你做过'session_start()'吗? – 2012-01-30 21:31:16

+1

@SOliver好点; Suhosin可能是这里的一个因素。 – cmbuckley 2012-01-30 21:33:07

回答

1

PHP Sessions across sub domains找到这个答案的,应当帮助:)

我不知道,如果问题仍然存在,但我只是碰到了同样的问题 并解决它调用 session_set_cookie_params()之前设置一个会话名称:

$some_name = session_name("some_name"); 
session_set_cookie_params(0, '/', '.some_domain.com'); 
session_start(); 

我没有改变我的php.ini,但现在一切正常 罚款。

+0

我试着单独设置名称,并设置名称+参数。都没有工作。 – Dramatological 2012-01-30 22:10:08

1
  1. 您可能需要调用session_write_close()强制cookie中的脚本结束之前保存(或您重定向)。
  2. 检查默认的cookie存储位置,看看文件中有什么。这通常是linux上的/tmp目录。
  3. 停止在文件中存储cookie。开始将它们存储在encrypted cookies中,这将从不需要的I/0请求中释放出服务器。
+0

我检查了tmp文件。我身份证的会话根本没有任何内容。我删除了它并再次尝试。会话变量不会写入文件。 – Dramatological 2012-01-30 23:19:45

+0

这是你的问题 - 文件也没有被写入。在设置会话变量之后,您是否将调用添加到了'session_write_close()'? – Xeoncross 2012-01-30 23:45:31