同一域下不同应用中的用户会话过期

问题描述

我们有一个反复出现的问题,与托管在同一域的子域中的所有应用程序中的意外随机用户会话到期有关。每次被踢都强制我们重新认证。

我们的系统是:

  • 3 个由服务器提供商运行的专用服务器,3 个静态 IP
  • 每台服务器都充当虚拟服务器,我们可以根据需要拥有任意数量的主机
  • 200-300 个不同的用户同时在应用程序中工作

服务器 1

  • 指向服务器托管中的 wordpress 网站的主域“example.com”
  • 一个论坛应用程序,PHPBB 3.2,托管在“forum.example.com”
  • wiki 中的 4 个 wiki 站点X.example.com
  • apache 2.4.46-1~bpo9+1
  • PHP 7.3
  • MysqL-server 10.1.48-0+deb9u2
  • PHP 会话文件夹:/home/.example.com/tmp

服务器 2

  • PHP 5.6 中的多个 SugarCRM CE 6.5.15 实例在不同的子域 SugarcrmX.example.com
  • apache 2.2.22-13+deb7u11
  • PHP 5.6
  • MysqL-server 5.5.57-0+deb7u1
  • PHP 会话文件夹:/home/sugarcrm.example.com/tmp
  • 每个应用在 config.PHP 中都有不同的 unique_key

服务器 3

  • 在不同子域中运行的多个 SuiteCRM 7.11.15 实例suitcrmX.sinergiacrm.org
  • apache 2.4.46-1~bpo9+1
  • PHP 7.3
  • MysqL-server 10.1.48-0+deb9u2
  • PHP 会话文件夹:/home/suitecrmX.example.com/tmp
  • 每个应用在 config.PHP 中都有不同的 unique_key

我们经常在不同的应用程序中并行工作:SuiteCRM、SugarCRM、论坛和 Wiki。然后,在我们无法定义的某个时刻,应用程序将我们踢出,并显示“您已被注销,因为您的会话已过期。”。将我们重定向到我们当时使用的每个应用程序的登录页面。从这一刻开始,持续了几个小时,这种情况一次又一次地发生,一次又一次地把我们踢出去。直到它似乎停止的时候,离开我们几个小时

这种情况发生在我们团队的所有成员身上:8 个人在不同的地点使用不同的设备、操作系统和浏览器工作。一些用户(在我们提到的 200-300 人中)也报告了这种情况,但我们认为这种情况发生的频率没有我们高。

在我们升级 wordpress、集成 Server 3 和 SuiteCRM 应用程序几个月后,这个问题开始发生,但我们无法确定它开始的确切时间。在此之前,它从未发生过。所以我们现在找原因有点困难。

我们已经尝试更改 PHP 会话参数 session.cookie_domain。相应地,为每个主机的每个子域设置不同的 cookie_domain。然后删除每个浏览器的 cookie。一开始,我们似乎找到了解决方案,因为我们的会话是持久的。但是过了几天,session过期问题又来了。

我们是否在任何服务配置中遗漏了一些关键配置?

知道如何调试吗?

谢谢

编辑:我们为每个应用程序 Sugarcrm1.example.com、sugarcrm2.example.com 等设置了一个子域...每个会话当前存储在不同的文件夹 /home/sugarcrm1.example.com/tmp、/home/ Sugarcrm2.example.com/tmp

我们不需要它们在公共会话中工作,每个应用程序/子域都有不同的用户/密码管理身份验证。

config.PHP 中的 unique_key 是 SugarCRM Core 用于生成唯一用户会话 ID 的 guid 代码

我们还没有尝试更改认会话名称PHPSESSID”。

解决方法

您需要考虑以下几点:

  1. 将您的会话存储移动到第三方/将其安装到外部/数据库。我会推荐 memcache 作为可扩展的解决方案。参考Is it recommended to store PHP Sessions in MemCache?
  2. WordPress、PhpBB、Wiki 和 SugarCRM 具有不同的会话管理机制。首先,您需要对所有这些进行更改以使用公共会话

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...