[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объясните, как проверить состояние юзера через JS
GET
Натолкните куда копать.

У юзера загрузилась страница. Он может быть авторизован, а может нет. Нажимает там на кнопку, $_POST уходит в PHP - обработчик функции JS.

Как внутри обработчика проверить зарегин ли он?

Сессии основного сеанса там не работают.

Думаю создать куку при авторизации и из обработчика проверить:
1. есть ли кука
2. соответствует ли она куке сохраненной в БД при авторизации.

Есть какие-нибудь другие методы? Где про это можно почитать?





Спустя 24 минуты, 5 секунд (13.09.2012 - 07:17) Guest написал(а):
Обычная авторизация только с использованием JS (AJAX).
Серверная часть как обычно, проверяет каждый запрос на соответствие авторизации и если нет то, если был ajax запрос выводит информацию обработчику, если обычный запрос и вывод страницы то как обычно smile.gif
Просто на клиенте JS обработчик должен всегда перехватывать ответы сервера и проверять информацию о не успешной авторизации пользователя, а это достигается единственной точкой отсылок AJAX запросов.

Спустя 25 минут, 8 секунд (13.09.2012 - 07:42) GET написал(а):
Цитата
и если нет то, если был ajax запрос


я так понимаю, это подразумевает перезагрузку страницы, а мне надо, чтоб этого не было.

Спустя 27 минут, 8 секунд (13.09.2012 - 08:09) Guest написал(а):
Нет, не обязательно, сервер работает всегда в одном режиме проверки, только вывод в браузер производится разными способами. Например если без перезагрузки, то JSON форматом можно уведомлять о сбое авторизации, если таковой был.

Спустя 3 минуты, 38 секунд (13.09.2012 - 08:13) Guest написал(а):
Проверка авторизации должна обязательно быть серверной иначе при использовании куки флага можно легко их удалить или подменить. Хотя, есть кука, она хранит хэш сессии.

Спустя 8 минут, 9 секунд (13.09.2012 - 08:21) GET написал(а):
Guest

Я вот не пойму...сайт загружен, сервер ждет от клиента действий. Через функцию JS в обработчик на сервер пришел запрос, на файл написанный на PHP, файл этот в данный момент автономный, он не видит сессию юзера, к примеру, все, что он может взять это что-то вытащить из физической памяти сервера, а не из оперативной. Конечно данные можно хоть JSON отправить, а можно и просто в строчку написать причем здесь это?

Можешь написать, что будешь делать внутри PHP обработчика, чтоб узнать пришел запрос от авторизированного юзера или нет?

Я и пишу про PHPSESSID, про эту куку. Отсылаем id юзера и смотрим совпадает ли она с той что хранится в БД.

Спустя 20 минут, 19 секунд (13.09.2012 - 08:41) Guest написал(а):
Я ж и говорю :)
обычная централизованная авторизация
В index.php:
session_start();
// как вариант if(isset($_REQUEST['session'])) session_id($_REQUEST['session']);
// в YII это более читаемо Yii

if (!isset($_SESSION['user_id']))
{
echo json_encode(array('result' => 'error', 'action' => 'auth', 'msg' => 'Auth not required!'));
exit();
}


По данным полученным от сервера, если результат ошибка обработчик сам определяет что ему делать. Здесь гибкость в том что обработчик может определять не только ошибки авторизации, но любые типизированные ошибки.

Спустя 9 минут, 56 секунд (13.09.2012 - 08:51) GET написал(а):
Guest
Цитата
if (!isset($_SESSION['user_id']))


Это внутри обработчика???

Там же не видно будет $_SESSION['user_id']!

Спустя 2 минуты, 22 секунды (13.09.2012 - 08:54) Guest написал(а):
Если нужно отделить от обычных запросов

session_start();
// как вариант if(isset($_REQUEST['session'])) session_id($_REQUEST['session']);
// в YII это более читаемо Yii

if (!isset($_SESSION['user_id']))
{
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']))
{
echo json_encode(array('result' => 'error', 'action' => 'auth', 'msg' => 'Auth not required!'));
exit();
}
else
{
if (!headers_sent()) header('Content-type: text/plain');
echo $error_page;
}
}

Спустя 3 минуты, 25 секунд (13.09.2012 - 08:57) GET написал(а):
Guest

Где этот код должен быть в index.php или обработчике запроса JS?

Спустя 1 минута, 25 секунд (13.09.2012 - 08:59) Guest написал(а):
Вот обработчик и по совместительству единственный, который отправляет AJAX запросы, на JQuery
$.ajax({
url: url,
data: data,
dataType: 'JSON',
async: true,
error: function()
{
new Error('Bad request for server URL: ' + url);
},
success: function (data, textStatus)
{
if(data['redult'] == 'error')
// Действия по обработке ошибки
else
// Нормальный сценарий работы
}
}
)

Спустя 39 секунд (13.09.2012 - 08:59) Guest написал(а):
Цитата
Где этот код должен быть в index.php или обработчике запроса JS?


Цитата
Я ж и говорю smile.gif
обычная централизованная авторизация
В index.php:

Спустя 9 минут, 47 секунд (13.09.2012 - 09:09) GET написал(а):
Guest

Я наверное тупой совсем.

Не могу понять, функция JS

$.post("TEST.php", {queryString: ""+inputString+""}


отсылает inputString в виде $_POST['queryString'] в TEST.php

причем здесь index.php?

Перезагрузки страницы нет. Index.php уже отработал.

Спустя 33 секунды (13.09.2012 - 09:10) Michael написал(а):
A.B.C. если сессии на куках (а это обычный вариант), то сессионная кука на сервер будет идти и при аякс запросе. И в обработчике запроса так же стартуешь сессию и тоже самое все доступно что и при обычной работе с перезагрузкой страницы.

Спустя 5 минут, 23 секунды (13.09.2012 - 09:15) Guest написал(а):
Цитата
причем здесь index.php?
Перезагрузки страницы нет. Index.php уже отработал.


Для этого делают централизованный вход, единственный для всех запросов.
Если разбрасывать, во всех придётся проверять авторизацию.

Спустя 11 минут, 38 секунд (13.09.2012 - 09:27) GET написал(а):
Guest

Можешь посоветовать инфу где почитать про
Цитата
Для этого делают централизованный вход, единственный для всех запросов.


Спустя 33 секунды (13.09.2012 - 09:27) GET написал(а):
Guest

Спасибо.

Спустя 9 минут, 56 секунд (13.09.2012 - 09:37) Guest написал(а):

Спустя 38 секунд (13.09.2012 - 09:38) Guest написал(а):
Цитата
Спасибо.

Не за что, удачи smile.gif

Спустя 5 часов, 14 минут, 4 секунды (13.09.2012 - 14:52) GET написал(а):
Guest

Еще раз хочу сказать спасибо. smile.gif
Понял, чего ты добивался, чтоб я понял. smile.gif)) Действительно централизованный вход это супер!


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.