1

I have two different domains named http://sample.com and http://example.com. Sample website developed by CAKEPHP and Example website developed by corephp. If I am going to login to example.com, this session should match with cakephp session. If I have logged anyone of website, It will act for both. Is this possible. Please suggest me what is the best way to workout it.

Thanks in Advance.

4

4 回答 4

6

有一种通用技术可以在单个服务器上运行不同的站点/域,称为vhosts。由于您可以为每个虚拟主机指定会话路径,因此也可以为所有虚拟主机定义相同的路径,这将导致共享会话。然后,在项目 A 中创建的会话也可用于会话 B 和其他方式。

虚拟主机不在乎您是否使用纯 PHP、CakePHP 或其他任何东西。会话是会话。

您需要的虚拟主机规则是(注意会话文件夹在两个定义中是相同的):

<VirtualHost *:80>
    ServerName www.sample.com
    DocumentRoot /var/www/xxx1
    <Directory "/var/www/xxx1">
        AllowOverride All
        php_value session.save_path "/var/mysessionfolder"
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/xxx2
    <Directory "/var/www/xxx2">
        AllowOverride All
        php_value session.save_path "/var/mysessionfolder"
    </Directory>
</VirtualHost>

要获得有关这方面的更多信息,阅读此线程可能很有用:如何防止 PHP 会话在不同的 apache vhosts 之间共享?这与你想要的相反。

于 2013-08-21T08:05:05.217 回答
3

那么 cake 将其会话数据存储在自定义会话名称中,因此如果您将以下内容放在 session_start() 之前;在 none cakePHP 站点上,您应该能够访问所有会话数据:

<?php session_name('CAKEPHP');?>
于 2013-08-21T17:29:51.833 回答
1

您需要连接到第一个网站的数据库并将用户会话与用户 cookie 进行比较。

$db = new mysqli("localhost", "user", "pass", "db");

$id         = $db->escape_string($_COOKIE["id"]);
$session    = $db->escape_string($_COOKIE["session"]);

$check      = $db->query("SELECT data FROM cake_sessions WHERE id = '" . $db->real_escape_string($id) . "'");
$checkarr   = $check->fetch_assoc();

if($session == $checkarr["data"])
    echo "logged";

未经测试;我也不确定cakephp authcookes,所以他们可能是错的。

于 2013-08-16T08:17:51.297 回答
1

您可以结合 Auth 组件使用 CAS 供应商和组件等第三方身份验证服务,并可以维护两个域之间的全局会话。

于 2013-08-16T13:30:40.227 回答