2

CMS - Joomla!2.5
任务- 当我登录 www.domain.com(A) 时,我应该会自动登录到 test.domain.com(B),反之亦然。
执行
当我访问站点 A 时,会话 cookie 设置为具有会话 ID。一旦我登录到站点 A,就会检查用户凭据,然后使用用户 ID 更新 j25_session 表中的会话记录。完成此操作后,我可以在站点 A 中自由导航,因为会话 id 位于会话 cookie 上。存储在 cookie 中的 cookie id 和 session id 在站点 B 上是相同的。这是因为我在两个网站上都将 cookie 域设置为 .domain.com 并且我在配置文件中使用了相同的秘密值。站点 B 也可以访问站点 A 的会话数据,因为表正在共享(创建视图)。所以理想情况下,即使我从站点 A 移动到 B,会话应该是有效的并且我应该登录。
问题
当我从站点 A 移动到 B 时,会话变得无效。据我调查,这是由于登录表单中的令牌造成的。表单中的令牌和会话中保存的令牌不同,这会使会话死亡。

有什么想法吗 ?

4

1 回答 1

1

如果您想手动执行此操作,您需要面对一些问题。首先有一个很棒的组件 - JFusion有很好的支持,但我不确定它是否允许两个 joomla 站点之间的双向会话。看看吧,如果不是几天,你可以节省很多小时!

用户

为了在不同的 joomla 站点上对某人进行身份验证,必须在站点 A 和站点 B 的 #__users 表中使用相同的数据库记录,除了相同的会话 cookie 之外,还具有相同的 ID 和用户名。

解决这个问题的几种方法:

  • 创建一个用户插件,将 #_ users 和 # _user_usergroup_map 中的条目从站点 A 同步到 B,反之亦然。这必须处理注册后创建数据、删除后删除记录和更新记录。
  • 使用 MySQL 复制 (Master <-> Master) 在站点 A 和 B 之间同步 #_用户和 # _user_usergroup_map 表,反之亦然

分享会

为了在 2 个 Joomla 网站之间共享有效会话,都需要访问相同的会话 cookie 和 #__sessions 表,你已经根据我的理解实现了,对吧?

如果没有,这是您必须面对的最大问题。解决它的几种方法:

  • 使用 curl 获取站点 B 的登录表单
  • 使用正则表达式从中提取令牌
  • 向站点 B 上具有登录任务的组件用户发送 POST 请求

另一个是:

  • 假设 #__users 表在两边是相同的
  • 在站点 A 上成功验证后,在站点 B 上的表 #__sessions 中创建相同的会话记录

另一个,也是最好的解决方案:

  • 使用 MySQL 复制 (Master <-> Master) 在两个站点之间复制 #__sessions 表

会话到期

即使您实施共享会话,您也可能需要面对这个问题。站点 A 和 B 上的会话将有不同的到期时间。这意味着当您在站点 A 上登录时,站点 B 上的会话可能会提前到期,这样您在访问站点 B 时就不会登录。

您可以通过以下方式解决它:

  • 在两个站点的 Joomla 后端设置相同的“会话过期时间”设置。
  • 使用 MySQL 复制或两个站点上的用户插件复制 #__users 表。

要实现这一点还有很多工作要做,但即使您决定手动执行,也请检查一些扩展,看看它们是如何做到的。祝你好运

编辑:我还建议查看此扩展:

于 2013-07-13T10:11:36.220 回答