0

我的用户在site_url.comCMS 上登录,但是我现在正在开发该网站的移动版本,在子域的 CMS 之外,m.site_url.com并希望会话与 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 的会话?

4

3 回答 3

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 来保存密码或银行信息,但是,这是我认为可以解决您的问题的唯一方法。

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

于 2013-07-26T19:56:56.293 回答
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</>
于 2013-07-26T20:02:39.270 回答
-1

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

这将保留域的会话,并且相同的会话将共享给所有子域。

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

于 2013-07-26T19:57:51.233 回答