如何将SESSION变量传递给父目录中的页面?

时间:2011-02-09 17:31:59

标签: php session subdomain

在我的网站上,我希望有几个子域名。为给定子域创建上下文的文件存储在相应的子目录中。

有时我需要链接到不属于子域的文件。

例如,在我的“subdomain1.mysite.org”上,我有一个指向“www.mysite.org/login.php”的链接。 “login.php”存储在包含与子域对应的所有子目录的目录中。

如果我以这种方式链接到“www.mysite.org/login.php”:href='../login.php',它不起作用。因为浏览器试图访问“subdomain1.mysite.org/../login.php”。为了解决这个问题,我以这种方式建立链接:href='http://www.mysite.org/login.php'但我认为通过这种方式我无法将会话变量传递给新页面(可能是这种情况吗?)。

所以,我的问题是我找不到将会话变量传递到位于父目录(或位于另一个域的页面)的页面的方法。有谁知道如何解决这个问题?

ADDED

根据建议,我厌倦了使用session_set_cookie_params来解决问题。但我仍然无法达到预期的效果。更多细节我做了以下几点:

我在index.php文件中为subdomain1.mysite.org生成内容我使用以下代码:

session_set_cookie_params(24*60*60,'/','.mysite.org');
session_start();
$_SESSION['page'] = $PHP_SELF;

稍后,在同一个文件中我链接到我的一个页面(我认为问题可以在这里)。我按以下方式创建链接:

href='http://www.mysite.org/login.php'

在login.php文件中,我有以下代码:

session_set_cookie_params(24*60*60,'/','.mysite.org');
session_start();
print "a".$_SESSION['page']."b";

结果“a”和“b”之间没有任何内容。所以,我仍然无法将会话变量从一个页面传递到另一个页面。有人知道我做错了吗?

已添加2 我必须说,如果我添加以下行,我的问题就解决了: session_name("some_name");

之前的

session_set_cookie_params

2 个答案:

答案 0 :(得分:5)

在PHP INI中,您可以将会话域设置为“.mysite.org”,然后您应该能够在多个域之间共享会话。相关变量是:

session.cookie_domain

您也可以使用session_set_cookie_params()功能在脚本中设置它。

修改 - 我应该注意,这只适用于您的子域位于同一服务器上(看起来像它们)。

答案 1 :(得分:0)

你是对的,不能以这种方式分享会话。但是,您可以使用安全cookie在子域之间共享用户数据:

http://us3.php.net/manual/en/function.setcookie.php

确保设置cookie时的域参数类似于

".mysite.org"

然后您就可以从mysite.org的任何子域

访问cookie