在我的网站上,我希望有几个子域名。为给定子域创建上下文的文件存储在相应的子目录中。
有时我需要链接到不属于子域的文件。
例如,在我的“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
。
答案 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