FE 用户会话在开发人员工具设备模式下不可用
FE user session not available in developer tools device mode
我们对 typo3(版本 6.2)进行了扩展。
在某一点,我们进行了 ajax 调用,我们希望在其中保存一些值。
为了检查用户是否登录,我们使用
$GLOBALS['TSFE']->fe_user->user['userid']
两个测试用户的用户 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.";
}
?>
我们的问题是,当我们查看page-source时,我们可以从if-condition中看到内容:
var = 1 (or: var = 2)
var > 0 - logged in!
当我们查看控制台(F12)时,我们可以看到else-condition的内容:
var =
var < 1 - not logged in.
此处变量为空?
Apacheerror.log给出通知:
Trying to get property of non-object in .....
谁能解释一下这是怎么回事?如果是非对象,变量怎么设置为1(或2)?
TYPO3 中的前端用户会话(除非在安装工具中进行了不同的配置)绑定到用户代理。如果您将浏览器控制台设置为另一种设备(例如 iPhone),则浏览器控制台会使用不同的用户代理:
因此用户会话不再适用。
出于开发目的或如果您意识到风险(会话劫持),您可以在安装工具中更改此设置:
A) 如果您使用的代码与 raw 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 机制来处理它。 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";
}
我们对 typo3(版本 6.2)进行了扩展。 在某一点,我们进行了 ajax 调用,我们希望在其中保存一些值。 为了检查用户是否登录,我们使用
$GLOBALS['TSFE']->fe_user->user['userid']
两个测试用户的用户 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.";
}
?>
我们的问题是,当我们查看page-source时,我们可以从if-condition中看到内容:
var = 1 (or: var = 2)
var > 0 - logged in!
当我们查看控制台(F12)时,我们可以看到else-condition的内容:
var =
var < 1 - not logged in.
此处变量为空? Apacheerror.log给出通知:
Trying to get property of non-object in .....
谁能解释一下这是怎么回事?如果是非对象,变量怎么设置为1(或2)?
TYPO3 中的前端用户会话(除非在安装工具中进行了不同的配置)绑定到用户代理。如果您将浏览器控制台设置为另一种设备(例如 iPhone),则浏览器控制台会使用不同的用户代理:
因此用户会话不再适用。
出于开发目的或如果您意识到风险(会话劫持),您可以在安装工具中更改此设置:
A) 如果您使用的代码与 raw 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 机制来处理它。 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";
}