在Joomla中同步会话令牌

时间:2013-07-12 23:05:37

标签: session joomla single-sign-on session-cookies access-token

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和会话ID在站点B上是相同的。这是因为我已将两个网站上的cookie域设置为.domain.com,并且我在配置文件中使用相同的秘密值。此外,站点B可以访问站点A的会话数据,因为这些表正在共享(创建的视图)。 理想情况下,即使我从站点A移动到B,会话应该是有效的,我应该登录 问题
当我从站点A移动到B时会话变得无效。据我调查,这是由于登录表单中的令牌。表单中的令牌和会话中保存的令牌不同,这会使会话死亡。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

用户

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

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

  • 创建一个用户插件,用于将#_ 用户和# _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表。

要实现这一目标还有很多工作要做,但即使您决定手动检查一些扩展程序,也只是为了了解它们是如何做到的。 祝你好运

编辑:我还建议查看这些扩展名: