我有两个名为http://sample.com和http://example.com的不同域名。由CAKEPHP开发的示例网站和由corephp开发的示例网站。如果我要登录example.com,此会话应与cakephp会话匹配。 如果我已经记录了网站的任何人,那么它将同时适用于两者。 这可能吗。请告诉我锻炼它的最佳方法是什么。
先谢谢。
答案 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供应商和组件等第三方认证服务,并可以维护两个域之间的全局会话。