我有 3 个域:
- member.example.com 用于 SERVER1 上的集中器登录
- news.example.com 获取 SERVER1 上的新闻
- video.example.com 用于另一台服务器 SERVER2 上的视频
对于我正在使用的跨子域会话:
session_name('example');
session_set_cookie_params(0, '/', '.example.com');
session_start();
当用户登录 member.example.com 时,所有会话数据都在 news.example.com 上可用,但在 video.example.com 上不可用,因为它位于另一台服务器上。所有子域的会话 id 都相同,但由于它是不同的物理框,会话文件不存在。
当子域托管在不同的物理服务器上时,我正在寻找能够跨子域共享会话的最佳方法。
我知道将数据存储在数据库中的方法,但希望避免这种情况。我也知道我可以在 video.example.com 的 URL 中发送加密的会话信息,但我觉得它很难看,我想创建一个干净的解决方案。
在遍历 cookie 和其他实现之后,我探索了以下场景。
在成功登录后的 members.example.com 中,我尝试通过使用 cURL 调用 video.example.com 上的会话生成页面来为 video.example.com 创建会话。我尝试使用以下代码(并使用 cURL 传递适当的字段):
session_name('example');
session_set_cookie_params(0, '/', '.example.com');
session_start();
$_SESSION['id']=$_POST['id'];
$_SESSION['name']=$_POST['name'];
print_r($_SESSION)
在 cURL 响应中,我发现为会话设置了这些变量,但不幸的是,为 cURL 调用创建了一个新的会话 ID。我试图通过现有的会话 ID 解决这个问题,但它不起作用。
我知道其他选择,但对这种方法特别感兴趣。