我们在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)?
答案 0 :(得分:0)
TYPO3中的前端用户会话(除非在安装工具中配置不同)绑定到User-Agent。如果您将其设置为其他类型的设备(例如iPhone),浏览器控制台将使用其他用户代理:
因此用户会话不再适用。
出于开发目的或如果您了解风险(会话高压),您可以在安装工具中更改此信息:
答案 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->user
为false
,否则为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";
}