2016-02-07 2 views
0

Мы сделали расширение в typo3 (версия 6.2). В какой-то момент мы делаем вызов ajax, где мы хотим сохранить некоторые значения. Для того, чтобы проверить, если пользователь вошел в систему мы используемFE пользовательская сессия недоступна в инструментах разработчика. Режим устройства

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

идента для двух testusers больше, чем 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. 

Переменная пуста здесь? Апач error.log дает уведомление:

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

Может кто-нибудь объяснить, что происходит? Если это не объект, то как переменная установлена ​​в 1 (или 2)?

ответ

0

Пользовательский сеанс Frontend в TYPO3 (если он не настроен по-другому в инструменте установки), привязанный к User-Agent. Консоль браузер использует другой агент пользователя, если вы установите его на другой вид устройства (например, iPhone):

Chrome Developer Tools User agent

Так сеанс пользователя не применяется больше.

В целях развития или, если вы осведомлены о рисках (сессия привет-домкрата), вы можете изменить это в инструменте установки:

Install Tool lockHashKeyWords

0

A) Если вы использовали код как вы показали в raw PHP-файл не будет работать, поскольку объект $GLOBALS['TSFE'] is NOT initialized - вы не указали, как вы обрабатываете запрос AJAX, но Trying to get property of non-object in ... ясно показывает это. Если вы будете расти уровень журнала для развития вы увидите уведомление
Notice: Undefined index: TSFE in /your/path/to/script.php

Вы должны создать фронтальный плагин вместо и обработать его с помощью пользовательского typeNum (предпочтительно) или использовать Ид mechanismus. eIDможет быть быстрее в некоторых случаях (более высокая производительность), но у вас будет больше работы с ним, поскольку вам нужно еще инициализировать части TSFE.

B) Если пользователь не вошел в вар $GLOBALS['TSFE']->fe_user->user является false иначе что это Array, вам не нужно проверять идентификатор пользователя.

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"; 
} 
+0

function functionName (sd) {var dat = JSON.stringify (sd); $ .ajax ({url: "path/to/php" type: "GET", data: {dat: dat}, Я попробовал D), и он сказал, что «User IS logged» в источнике страницы, и " Пользователь не зарегистрирован "в консоли ... –

+0

@DavidLamhauge вы должны предоставить более подробную информацию о том, что вы сделали, также щелкните на панели ** Сеть ** по запросу Ajax и покажите мне, что он возвращает. С моей точки зрения ваш запрос не выполняется должным образом, и что JS показывает, что какое-то зарегистрированное состояние является просто ошибкой – biesior

+0

Вызывается php-файл, который предназначен для сохранения данных, которые я хочу сохранить, и запускался как исходный PHP файл. $ GLOBALS ['TSFE'] вернул NULL, но после того, как я включил php-файл в мой основной файл controller.php, $ GLOBALS ['TSFE'] вернул правильный «uid». Теперь моя забота заключается в том, что она перекликается с разными значениями в исходном коде и в консоли браузера. Если это потому, что они используют разные пользовательские агенты, тогда нет причин беспокоиться ... - или? –