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

Typo3 FE用户会话在开发人员工具设备模式下不可用,typo3,typo3-6.2.x,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 "v

我们在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.";
}
?>
当我们查看控制台(F12)时,我们可以看到else条件中的内容:

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

有人能解释发生了什么事吗?如果它是一个非对象,为什么变量被设置为1(或2)?

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

因此,用户会话不再适用

出于开发目的或如果您意识到风险(会话hi劫持),您可以在安装工具中更改此选项:

A)如果您像在原始PHP文件中显示的那样使用代码,它将不起作用,因为
$GLOBALS['TSFE']
对象未初始化-您没有指定如何处理AJAX请求,但是
尝试在…
中获取非对象的属性清楚地表明了这一点。如果要提高开发日志级别,您会看到一个通知
注意:未定义索引:TSFE in/your/path/to/script.php

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

B)如果未记录用户,则var
$GLOBALS['TSFE']->fe_user->user
false
否则为
数组
,您无需检查用户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";
}

函数functionName(sd){var dat=JSON.stringify(sd);$.ajax({url:“path/to/php”type:“GET”,data:{dat:dat},我尝试了D),它在页面源代码中表示“用户已登录”,而“用户未登录”在console…@DavidLamhauge中,您必须提供有关您所做操作的更多详细信息,还可以单击网络面板上的Ajax请求,并显示它返回的内容。在我看来,您的请求没有正确执行,JS显示某些日志状态只是一个错误调用的php文件是为了保存我要保存的数据,然后它最初是一个原始PHP文件,$GLOBALS['TSFE']返回NULL,但在我将PHP文件包含在主controller.PHP文件中之后,$GLOBALS['TSFE']已返回正确的“uid”。我现在主要关心的是它在源代码和浏览器控制台中回显不同的值。如果是因为它们使用不同的用户代理,那么就没有理由担心…-或者?这是一个GET请求,所以复制它的路径并粘贴到浏览器的地址栏中,您将看到响应主体c如果它是预期的,如果你想像我在A点中所说的那样工作-你需要使用TYPO3 FE插件或eID正确地工作
if ($GLOBALS['TSFE']->loginUser) {
    echo "User IS logged";
} else {
    echo "User is NOT logged";
}