Перенаправление после истечения сеанса для вызова ajax / json - PullRequest
1 голос
/ 19 октября 2010

Здравствуйте. Я работаю над получением данных из базы данных, отправляя часть значения с помощью метода getJSON библиотеки JQuery в функцию PHP, которая извлекает данные из базы данных.Затем данные помещаются в массив пары имя-значение и кодируются в формате json и возвращаются / отражаются.Это поможет jQuery заполнить требуемые элементы HTML данными из базы данных.Это прекрасно работает для меня.

Моя проблема - перенаправление входа в систему, когда пользователь не вошел в систему или когда сеанс истек.Я работаю с cakePHP, поэтому я использую их компонент Auth, чтобы проверить, вошел ли пользователь в систему

if(isset($this->Auth->User('id')))
{
//do reqd
}
else
{
$this->Session->setFlash(__('Session Expired.', true));
$this->redirect(array('controller'=>'users','action' => 'login'),null,true);
}

И когда сеанс истек, страница входа фактически отображается как html в ответе jsonчем перенаправление всей страницы.Я знаю, что это ответ json, поскольку я вижу страницу входа в систему, отображаемую в HTML-части консольного приложения firebug.Я не уверен, нужен ли какой-либо другой тип перенаправления.

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Единственный способ, который я нашел для управления этим, состоит в том, что на стороне сервера, если сеанс истек, я не запускаю запрос AJAX, но возвращаю нормализованный объект JSON, чтобы сказать, что сеанс истек, и управляю перенаправлением на стороне клиента через AJAX.

Сервер:

// If $_SESSION expired
echo json_encode(new array("session" => "expired"));
exit(0);

Клиент:

success: function(data) { if(data && data.session) { /* Session expired */ } }

Без этого, если для dataType установлено значение JSON, запрос завершится неудачно и перейдет к обратному вызову с ошибкой «Invalid JSON».

1 голос
/ 19 октября 2010

Не уверен, как это сделать конкретно в Cake, но общий подход заключается в поиске заголовка HTTP, который обычно отправляется браузерами при использовании XHR:

X-Requested-With: XMLHttpRequest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...