我正在将自定义 TYPO3 插件从 TYPO3 v10 更新到 v11。
当新用户到达时,fe_sessions 表中会设置一条记录,因此显然正在创建一个新会话。在 TYPO3 v10 中,即使用户没有登录,我也可以通过以下方式访问该会话 ID:
$sessionId = $GLOBALS['TSFE']->fe_user->user['ses_id'];
有人对如何在 v11 中执行此操作有任何建议吗?我在文档或网络搜索中没有找到任何符合要求的内容。 TYPO3\CMS\Core\Session\UserSessionManager 看起来很有前途,但是您需要使用 userSessionManager 创建一个新的 userSession 对象才能访问 sessionId。然而,除了创建 UserSession 对象之外的所有 userSessionManager 方法都需要会话 id 作为参数(循环陷阱)。唯一不要求 sessionId 的方法是创建一个新的匿名会话,该会话与 fe_sessions 表中的 id 不匹配。
由于我想访问一个页面上的 sessionId 并在另一个页面上重新访问它作为安全检查的一部分,因此任何创建新 sessionId 以查看它的方法都不起作用。
我错过了什么?非常感谢。
用户信息已在 TYPO3 v11 中移动到上下文中,可以使用
$context->getPropertyFromAspect('frontend.user', '...');
进行访问
参见手册
Session 有自己的 UserSessionMangager 和 API
我还没有在 v11 中测试过这一点,但在 v12 中你可以这样做:
$sessionId = $GLOBALS['TSFE']->fe_user->getSession()->getIdentifier();
使用
getSession()
,您将收到 TYPO3\CMS\Core\Session\UserSession
的实例,它具有用于检索会话 id 的方法 getIdentifier()
。