Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session Joomla中的同步会话令牌_Session_Joomla_Single Sign On_Session Cookies_Access Token - Fatal编程技术网

Session Joomla中的同步会话令牌

Session Joomla中的同步会话令牌,session,joomla,single-sign-on,session-cookies,access-token,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_会话表中的会话记录。完成此操作后,我可以在站点A中自由导航,因为会话id位于会话cookie上。 cookie中存储的cookie id和会话id在站点B上是相同的。这是因为我已将两个网站上的cookie域设置为.domain

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


有什么想法吗?

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

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

解决此问题的几种方法:

  • 创建一个用户插件,将#######用户和##用户组"地图中的条目从站点a同步到站点B,反之亦然。这必须处理注册后创建数据、删除后删除记录和更新记录的操作
  • 使用MySQL复制(Master-Master)在站点A和站点B之间同步#u用户和#u用户组映射表,反之亦然
分享会议 为了在2个Joomla webites之间共享有效会话,这两个站点都需要访问相同的会话cookie和#_会话表,据我所知,您已经实现了该表,对吗

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

  • 使用curl获取站点B的登录表单
  • 使用正则表达式从中取出标记
  • 向站点B上具有登录任务的组件用户发送POST请求
另一个是:

  • 假设#(uu)用户表两侧相同
  • 在站点A上成功进行身份验证后,在站点B上的表#_sessions中创建相同的会话记录
另一个也是最好的解决方案:

  • 使用MySQL复制(Master-Master)在两个站点之间复制#_会话表
会话过期 即使在实现共享会话时,也可能需要面对这个问题。站点A和站点B上的会话将有不同的过期时间。这意味着,当您登录站点A时,站点B上的会话可能会提前到期,以便您在访问站点B时不会登录到站点B

您可以通过以下方式解决此问题:

  • 在两个站点的Joomla后端设置相同的“会话过期后”设置
  • 在两个站点上使用MySQL复制或用户插件复制#uu用户表
要实现这一点需要做很多工作,但即使您决定手动执行,也要查看一些扩展,看看它们是如何实现的。 祝你好运

编辑:我还建议签出以下扩展: