使用带两个不同域的cakephp会话

时间:2013-08-12 13:00:45

标签: php session cakephp

我有两个名为http://sample.comhttp://example.com的不同域名。由CAKEPHP开发的示例网站和由corephp开发的示例网站。如果我要登录example.com,此会话应与cakephp会话匹配。 如果我已经记录了网站的任何人,那么它将同时适用于两者。 这可能吗。请告诉我锻炼它的最佳方法是什么。

先谢谢。

4 个答案:

答案 0 :(得分:6)

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

如果你使用纯PHP,CakePHP或其他什么,vhosts不关心。会话是会议。

您需要的vhost规则(请注意两个定义中的会话文件夹相同):

<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>

要了解更多信息,请阅读此主题可能有用:How to prevent PHP sessions being shared between different apache vhosts?会询问您想要的相反内容。

答案 1 :(得分:3)

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

<?php session_name('CAKEPHP');?>

答案 2 :(得分: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,所以他们可能错了。

答案 3 :(得分:1)

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