我有一个专门的服务器,有3个网站:
www /
www / site1(www.site1.com)
www / site2(www.site2.com)
www / site3(www.site3.com)
我是因为如果在site1,site2网站或3上创建会话,则会使其他两个会话可用,例如在身份验证环境中。
Site1:=>会员1 =>记录好,创建会话ID
<?php
$ _SESSION ['Id'] = $user-> id;
echo $ _SESSION ['id']; // Returns 1
?>
我需要定期。&gt;
在site2和网站3上。
答案 0 :(得分:2)
两个站点之间需要匹配两件事情才能从两个站点访问同一会话:
对于(1),如果您使用的是基于标准文件的会话存储,则只需将所有站点指向磁盘上的同一目录以存储会话,方法是将the session.save_path
setting设置为相同的值
对于(2),您需要在一个站点上传递session_id()
的输出,并在下一个站点上使用相同的函数进行设置。最简单的方法是在查询字符串上创建一个包含会话ID的链接,例如: 'http://site2.example.com/?passed_session_id=' . session_id()
但是,要注意安全隐患。有两种不同类型的攻击会使您的应用程序容易受到攻击:
你可以通过一些反措施来抵御这种攻击:
session_regenerate_id()
更改会话ID,或以其他方式更改权限级别。这减少了固定攻击的范围,因为一旦用户登录,攻击者的会话将变为无效。$_SESSION['session_passing'] = array('nonce' => uniqid(), 'time_limit' => strtotime('+2 minutes')); $url = 'http://site2.example.com/?passed_session_id=' . session_id() . '&nonce=' . $_SESSION['session_passing']['nonce'];
如果,当从查询字符串中读取会话ID时,nonce与会话中的内容不匹配,或者时间限制已经过去,则不允许访问该会话(仅创建一个新的空会话,好像用户之前没有访问过该站点。)当nonce 匹配时,将其从会话中删除,以便加载相同的URL不再有效。一个完全强大的实现是棘手的,但上述反措施的某些组合应该使你不那么容易成为目标。
答案 1 :(得分:1)
我立刻找到了解决方案! 如果user_id会话存在,我检查网站的索引,是否已连接,如果它不存在就可以,所以我重定向到主站点。 如果会话是我通过此URL密钥用户并连接该成员关于此密钥(加密)。但如果没有找到,我只是重定向到用户所需的网站! :) 像馅饼一样容易(法语术语^^)和功能! 谢谢您的回答!
如果你想问我代码。
答案 2 :(得分:0)
1)您可以通过一些PHPSESSID查询字符串将会话ID发送到ajax中的站点n°2,但我不知道它是否能完成这项工作......
2)如果用户访问网站#2,考虑通过某些ajax或查询字符串推送该session_id,您的php将在/ tmp / session_id上反序列化该session_id
然后如果系统不会在两个不同的主机上处理相同的session_id,则会创建一个新会话,如果您想要处理稍后将通过网站#1存储的新信息并将其反序列化,则还将基本session_id存储到该新会话中。结束..