我的用户已在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
目录。内部/mobile
是index.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会话?
答案 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