FE用户会话在开发人员工具设备模式下不可用

时间:2016-02-07 16:28:52

标签: typo3 typo3-6.2.x

我们在typo3中进行了扩展(版本6.2)。 在某一点上,我们进行ajax调用,我们想要保存一些值。 为了检查用户是否已登录,我们使用

$GLOBALS['TSFE']->fe_user->user['userid']

两个testusers的用户ID大于0.调用的(编辑的)php看起来像这样:

<?php
$var = $GLOBALS['TSFE']->fe_user->user['userid'];
if($var > 0) {
    echo "var = ".$var."\n";
    echo "var > 0 - logged in!";
}else{
    echo "var = ".$var."\n";
    echo "var < 1 - not logged in.";
}
?>

我们的问题是,当我们查看页面源时,我们可以看到if条件中的内容:

var = 1 (or: var = 2)
var > 0 - logged in!

当我们查看控制台(F12)时,我们可以看到来自else条件的内容:

var = 
var < 1 - not logged in.

这里的变量是空的? Apache error.log发出通知:

 Trying to get property of non-object in .....

有谁可以解释发生了什么?如果它是非对象,为什么变量设置为1(或2)?

2 个答案:

答案 0 :(得分:0)

TYPO3中的前端用户会话(除非在安装工具中配置不同)绑定到User-Agent。如果您将其设置为其他类型的设备(例如iPhone),浏览器控制台将使用其他用户代理:

Chrome Developer Tools User agent

因此用户会话不再适用。

出于开发目的或如果您了解风险(会话高压),您可以在安装工具中更改此信息:

Install Tool lockHashKeyWords

答案 1 :(得分:0)

A)如果您使用的代码与在原始 PHP文件中显示的代码一样,它将无效,因为$GLOBALS['TSFE']对象 NOT 已初始化 - 您没有指定如何处理AJAX请求,但Trying to get property of non-object in ...清楚地表明了这一点。如果您将升级开发日志级别,您会看到通知
Notice: Undefined index: TSFE in /your/path/to/script.php

您应该创建一个前端插件并通过自定义 typeNum (首选)或使用 eID mechanismus 处理它。在某些情况下, eID 可能更快(性能更好),但您需要更多工作,因为您仍需要初始化TSFE部件。

B)如果用户未登录,则var $GLOBALS['TSFE']->fe_user->userfalse,否则为Array,您无需检查用户ID。

C)如果要检查整数值,并且您不确定索引是否存在,则应使用
而是intval($GLOBALS['TSFE']->fe_user->user['uid'])

D) TSFE有一个属性,用于确定FE用户是否已登录:

if ($GLOBALS['TSFE']->loginUser) {
    echo "User IS logged";
} else {
    echo "User is NOT logged";
}