Определить пользователя ajax запроса
Всем добрый вечер! Как в частности на modx можно реализовать определить в скрипте к которому обращаемся ajax запросом id пользователя. Я делал так, выводил скрытое поле с id пользователем и хэшом этого id (от подменны id) передавал их и сверял на стороне сервера, но подозреваю, что это не совсем правильно, и можно реализовать через sessin_id. В БД для пользователя пишится его sessin_id, т.е. теоретически можно использовать его, передавать через ajax (насколько это правильно?). Но тут есть загвоздка, если пользователь зашел в лк через несколько браузеров sessin_id у него будет разный, а в базе один. Как вообще такие вещи делаются? Если можно подоходчивей......)) В модх есть токен, но как реализовать и использовать не совсем понимаю… просветите как грамотно делаю?
Комментарии: 10
Если пользователь авторизован, то его айди уже хранится в сессии
return $_SESSION['modx.user.contextTokens']['web'];
B и что это дает? Речь идет про ajax… Каким образом можно воспрепятствовать нерадивому пользователю (допустим у него id=5) у которого в ЛК есть форма изменить ИМЯ. Соответственно мы должны вывести скрытое поле c id=5, значение которое передадим. Менятся будет ajax-ом. Соответственно мы должны передать в скрипт новое ИМЯ и id=5 пользователя. А скрипт уже изменит в БД у пользователя с id=5 ИМЯ на новое. НО что мешает пользователю, открыть панель разработчика увидеть это скрытое поле и поменять значение на допустим 6, соответсвенно ИМЯ изменится у пользователя в базе с id=6.
Не нужно никаких скрытых полей. MODX умеет определять текущего пользователя. При инициализации он ищет куку PHPSESSID с именем сессии. Находит эту сессию в таблице сессий. В ней находит пользователя и сохраняет его в $modx->user. Так что просто запрашиваем $modx->user->id в ajax скрипте и сохраняем данные для текущего пользователя.
Авторизованный юзер всегда здесь:
$modx->user
Id его можно получить так$modx->user->id
Хм… вы меня смутили. Когда то давно я так пытался получить id в обработчике, но получать в стороннем php файле (обработчике ajax запроса), не сниппете! не удавалось(вроде 0 возвращал всегда или ошибку, сейчас не вспомню). Естественно в файле я подключал modx. Поэтому я подумал что обработчик не знает какой пользователь инициировал его выполнение, и забил на это, стал передавать id пользователя и хэш id… Завтра проверю ваши утверждения, неужели я так жестоко ошибался… и обработчик знает id пользователя......(((
В общем попробовал, в обработчике id пользователя не получить… возвращает 0. Есть файл обработчик test.php
<?php
define('MODX_API_MODE', true);
// Full path to the index
require_once($_SERVER['DOCUMENT_ROOT'].'/index.php');
$modx = new modX();
$modx->initialize('mgr');
echo $modx->user->id;
кнопка в личном кабинете и запрос к обработчику…$(document).on("click", ".test", function(){
$.post('/assets/components/azstemplate/ajax/test.php', { }, function(success) {
});
});
Что не так? <?php
define('MODX_API_MODE', true);
// Full path to the index
require_once($_SERVER['DOCUMENT_ROOT'].'/index.php');
//$modx = new modX();
$modx->initialize('mgr');
echo $modx->user->id;
А так?
Ребята, всем спасибо… то что нужно, все заработало. Можно как к сессии обратится, можно так же и и к объекту user, что по мне понятней и удобней… Всем плюсы к карме.......))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.