正如我之前发布的那样......我用两种语言创建了一个网站。一个网址为www.mainDomain.com
(英文),另一个网址为www.fr.subDomain.com
(法文)。
两者都在CakePHP中完成,用法语我刚刚将其视图更改为法语。但问题是,当任何人登录英文版本然后切换到法语版本时,会话不会识别它并再次请求登录。它已成为我迄今为止所做的Web应用程序中最大的错误。
为此,正如斯旺尼告诉我通过a link,我在我的应用程序上做了,因为它在链接上说。显然,它适用于登录两个域之间的共享会话(主域和它的子域)。但是当我彻底检查它时,我发现两个站点都在从数据库中抛出最新的新闻,两个数据都不同。只是为了检查我是否错了,我将一些保存变量更改为会话数组中的数据库。但现在它拒绝记住任何事情(会话)。有谁能告诉我这可能有什么问题,我该如何解决这个...... ???
提前致谢
答案 0 :(得分:3)
我不确定我完全理解,但我会尝试。我认为这是关于一个名为session.cookie_domain
的PHP设置。
假设您的网站包含以下网址:
您想要的设置是:.example.org
。
您可以在php.ini
,.htaccess
文件甚至PHP本身中进行调整:
<?php ini_set('session.cookie_domain', '.example.org'); ?>
如果您的网站在两个完全不同的域上运行,例如:
...然后无法在这两个不同的域之间共享cookie。
答案 1 :(得分:3)
@dooltaz这是一个很好的解决方案。问题是,蛋糕似乎是在我之后设置cookie。我所做的是向用户发送一个重定向方法,然后将cookie设置移动到afterFilter
function afterFilter() {
if (!empty($this->params['url']['session_key'])) {
// Setup variables here...
setcookie(Configure::read('Session.cookie'), $this->params['url']['session_key'], time()+360000, '/');
// Cakes cookie method will put your cookie name in [] so it does not work.
}
}
(还修复了代码中的拼写错误..)
答案 2 :(得分:2)
如果您有两个不同的域名,我建议如下:
在“www.mainDomain.com”上,输入指向“www.fr.subDomain.com”网站的链接,并在您的视图文件中传递Cookie:
$session_cookie = $_COOKIE[Configure::read('Session.cookie')];
echo $html->link('See French Site', 'http://www.fr.subDomain.com/?session_key='.$session_cookie);
然后在法国网站上添加一些代码来模仿app_controller.php&gt;中的cookie。 beforeFilter()。
function beforeFilter() {
if(!empty($this->params['url']['session_key']) {
// Setup variables here...
setcookie(Configure::read('Session.cookie'), $session_cookie, time()+360000, '/', $domain);
// You could use CAKE's setcookie command here.
}
}
现在cookie匹配,您将不得不使用数据库会话或基于蛋糕文件的会话。阅读core.php中的说明进行设置。
这应该允许您基本上在各个站点上共享相同的会话。我实际上正在通过一次登录在多个站点上实施ACL。它可能会有点棘手,但只是一步一步地做,你会做得很好。另外,不要害怕跳进Cake核心代码,看看它是如何工作的。