将会话共享到子域 - PHP

时间:2013-07-26 19:41:34

标签: php

我的用户已在CMS上的site_url.com登录,但我现在正在子网m.site_url.com上的CMS之外开发该网站的移动版本,并希望会话与CMS。

我已经包含了一个包含所有CMS功能的文件,如下所示:

<?php include('/home/flyeurov/public_html/core/codon.config.php');

子域m.site_url.com位于/public_html/mobile目录。内部/mobileindex.php,是触发器,用于显示仪表板或登录表单,具体取决于用户的状态(登录与否)。

它正常工作,我可以登录并查看信息中心,但只有在我访问直接路径时才会显示site_url.com/mobile/index.php。如果我已登录并访问此路径,则会转到crew_center.php - 仪表板。

当我在m.site_url.com访问子域时,不会发生这种情况。即使我已登录,也会显示login.php页面。

以下是index.php

<?php include('/home/flyeurov/public_html/core/codon.config.php');

session_set_cookie_params(0, '/', '.site_url.com');

if(Auth::LoggedIn())
{
    header("Location: crew_center.php");
} 
else
{
    header("Location: login.php");
}

?>

因此,我可以想象这是一个会话问题,但我如何与m子域共享CMS会话?

3 个答案:

答案 0 :(得分:0)

尝试设置Cookie!

当用户在sitea.com登录其帐户时,请设置Cookie。

setcookie("TestCookie", "COOKIE-VALUE", time()+3600, "/", "siteb.com");

这将设置一个包含此信息的cookie:

Name: TestCookie
Value: COOKIE-VALUE
Expiration: One Hour
Cookie directory: /
Domain: siteb.com

域名设置为siteb.com,以便siteb可以读取cookie中包含的值。

现在您所要做的就是在siteb.com上阅读cookie!

我不建议使用cookie来保存密码或银行信息,但是,这是我认为可以解决问题的唯一方法。

我希望这有帮助,如果您需要进一步的帮助,请告诉我。

答案 1 :(得分:0)

您无法跨域传递会话ID,但它们并非旨在以这种方式工作(出于安全原因)。虽然您可以执行我以前所做的事情,并将会话数据以序列化格式存储在cookie中,或者作为表单中的POST变量存储,或者作为URL的一部分以base64编码的序列化格式存储。

<input type="hidden" name="session_data" value="<?php echo(base64_encode(serialize($_SESSION))); ?>"/>

<a href="http://sub.domain.com/?session_data=<?php echo(base64_encode(serialize($_SESSION))); ?>">Go Here</>

答案 2 :(得分:-1)

您必须告诉服务器保留域的会话而不是子域。 它可以通过 * ini_set('session.cookie_domain','site_url.com'); *

来实现

这将保持域和同一会话的会话将共享到所有子域。

访问http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-domain