$_SESSION['mydata'] 在 MW 中消失

$_SESSION['mydata'] disappears in MW

我正在尝试了解 MW 1.31.1 的工作原理。我有以下钩子:

$wgHooks['UserLoginComplete'][] = 'onUserLoginComplete';

function onUserLoginComplete(User &$user, &$inject_html, $direct){
      $_SESSION['mydata']  = 'some data';
}

当用户成功通过身份验证时,它基本上会在 $_SESSION 中存储一些数据。只要我通过身份验证,我如何才能将 $_SESSION['mydata'] 保持在会话中。

让我感到困惑的是当我在登录时检查 "Keep me logged in" 并在几个小时后返回到维基站点。我仍然通过系统进行身份验证,但是 $_SESSION['mydata'] 消失了。

从 1.27 开始 SessionManager was introduced, MediaWiki does its own session handling. Depending on the value of $wgPHPSessionHandling 它将完全忽略 PHP 会话或尝试将它们与 MediaWiki 会话同步。改为使用 MediaWiki 的会话处理方法:

SessionManager::getGlobalSession()->set( 'mydata', 'some data' );

至于从会话中消失的数据,它并不意味着持久存储机制,长期行为完全取决于为其配置的存储机制 - 检查 $wgSessionCacheType and $wgObjectCacheSessionExpiry