2012-02-19 85 views
0

有谁知道如何在子域之间保持会话?

我可以使用两个不同的子域访问特定的cookie,但问题仍然存在......当我尝试向其他子域发送$ _SESSION ['test']时,它不会显示在另一个子域中:

subdomain1.domain.com/trial.php

<?php 
ini_set("session.cookie_domain", ".domain.com"); // allow access to this cookie from any subdomain 
session_start();  // create cookie 
$_SESSION['test'] = "TEST1"; // lets try to send "TEST1" in the other subdomain 
?> 

subdomain2.domain.com/trial.php

<?php 
ini_set("session.cookie_domain", ".domain.com"); 
session_start();  // cookie already set 
print_r($_SESSION); // $_SESSION array is empty 
?> 

感谢, milkael

回答

3

在数据库中更好地存储会话,并将其作为cookie传递。 PHP在其中有一个参数(域)setcookie()以使cookie可用于整个域(包括子域)。

如此,前提是你的域和子域访问同一个数据库(或至少可以访问到保存会话数据库):

  • 店会话ID的数据库(会话ID应该是每一个独特的用户)
  • 店在浏览器cookie中相同的会话ID(可跨多个域)
  • 当用户访问你的另一子域,只需用的值与数据库进行比较的cookie值,你就会知道是谁那个人是一个一样的人。
+0

嗯,感谢您的回复,但我不喜欢自己制作会话,我更愿意让PHP处理它。你可以请调试以前的PHP代码,以便第二个子域提取$ _SESSION ['test']的值吗?谢谢 – 2012-02-19 13:29:17

+0

*“这样做的缺点是会话数据无法与您一起旅行到其他子域名。”* - http://www.epigroove.com/posts/87/using_php_sessions_across_subdomains – Joseph 2012-02-19 20:43:29

+0

http://stackoverflow.com/问题/ 6318492 /共享会话,过子域功能于PHP – Joseph 2012-02-19 20:47:45