Joomla报错:启动应用/会话失败 及getApplication函数站点ID问题咨询
以下是几种可能导致同事系统未触发报错的情况:
二次调用未传入不同的站点ID:如果同事后续调用
getApplication()时,要么没传$id参数(用默认的null),要么传入的$id和首次调用完全一致,Joomla会直接复用已初始化的应用实例,不会触发站点ID不匹配的校验,自然不会出现会话启动失败的报错。会话配置或初始化逻辑被修改:同事的系统可能修改了Joomla的会话配置(比如改用全局共享的数据库存储会话,而非默认的文件存储),或者通过自定义扩展修改了会话初始化的逻辑,跳过了站点ID不匹配时的校验环节,从而避免了报错。
应用实例被手动重置:如果同事的代码在二次调用
getApplication()前,手动重置了已有的应用实例(比如执行Factory::$application = null;或者调用Factory::resetApplication()方法),此时!self::$application的检查会通过,Joomla会重新用传入的站点ID初始化应用,不会触发冲突报错。Joomla版本差异:不同版本的Joomla中,
getApplication()的校验逻辑和报错机制可能存在差异。比如部分旧版本对二次调用的站点ID校验不严格,或者不会将站点ID不匹配的问题关联到会话启动失败的报错上,同事使用的版本刚好属于这种情况。自定义扩展重载了Factory类:同事的系统可能安装了自定义扩展,该扩展重载了
Factory类的getApplication()方法,修改了站点ID的校验规则或会话初始化流程,从而规避了原本的报错。
内容的提问来源于stack exchange,提问作者Jav

