JQuery AJAX батут перенаправления - PullRequest
0 голосов
/ 14 июля 2009

Я работаю на сайте, где пользователи получают 30-минутный файл cookie, и после его истечения любые вызовы на сервер перенаправляются на «сеанс истек, нажмите здесь, чтобы снова войти в систему». Вот морщина:

Когда пользователь попадает на страницу с истекшим сроком действия сессии, URL этой страницы совпадает с той страницей, которую он пытался открыть. Нажав ссылку «Войти снова», пользователь переходит на общую страницу входа, которая использует реферальный URL (URL, который они пытались получить), чтобы вернуть его туда, куда он первоначально пытался перейти, вместо общего «приветствия». экран.

Так что, если я сделаю AJAX-вызов на сервер и скажу ему заполнить некоторый div ответом, я получу div со страницей «сеанс истек» внутри него.

Однако я получаю эту страницу "сеанс истек" только один раз. Так, если, например, у меня есть два окна, открытые для одного и того же сайта, и я щелкаю ссылку на одном, я получу ошибку истечения сеанса. Если я переключаю окна и нажимаю ссылку в другой, я получаю общую страницу входа. Таким образом, я только один раз вижу страницу "сеанс истек".

Теперь я просмотрел этот вопрос:

Как управлять запросом на перенаправление после вызова jQuery Ajax

И смог добиться действительно значительного прогресса, по крайней мере, в моем понимании, но из того, что я могу сказать, это решение в основном имеет jquery, перехватывая ответ и ссылаясь на страницу общего доступа.

Я не уверен, что это то же самое, что я хочу. Во-первых, неясно, будет ли страница входа всегда видеть мою страницу (страницу ajax) в качестве реферала. Есть и другая проблема, возможно, не существенная, но она может быть.

Из-за этого перенаправления батута (я надеюсь, что это правильный термин для этого случая), данные POST имеют тенденцию нарушать отскок после повторного входа в систему. Он получает сообщение об ошибке сервера о неправильной длине URL.

Прямо сейчас, я настроил его так, что если ответ сервера не равен 200, он выводит ответ xmlHttp, который при первом триггере выдает «вы перенаправлены, это нормально?» оповещение из браузера. При втором запуске я получаю страницу входа в полном HTML-коде. (На самом деле это зависит от браузера. Chrome просто дует).

Итак, что я хочу, если это можно сделать, так это три вещи:

  1. Если ответ не равен 200, всю страницу следует заменить на возвращенный ответ xmlHttp (как перенаправление, но не на адрес, а на страницу, на которую сервер пытается перенаправить), и

  2. В перенаправлении / перерисовке страницы НЕ должно быть никаких пост-данных, и я думаю:

  3. Все это должно быть выполнено как глобальная функция до выполнения реального запроса.

Итак, тонкости, на которых я заблудился:

как правильно перенаправить всю страницу (имейте в виду, я не могу инициировать перенаправление страницы после получения ответа, потому что тогда я не получу страницу "сеанс истек".)

и

Если я смогу установить функцию (событие Ajax, я полагаю), она сделает тестовый вызов для ВСЕХ моих функций ajax БЕЗ необходимости ссылаться на эту функцию текстового вызова ОТ каждой функции ajax. Я действительно теряюсь в документации Ajax Events на сайте jquery, так как иногда кажется, что он звучит автоматически (как будто он будет работать независимо от того, как я его называю), в то время как в других случаях кажется, что это способ сделать это скользким функция, которая делает то, что должна, но только для тех функций ajax, которые не забывают ее запрашивать.

Последнее замечание, и я ценю всех, кто прочитал это далеко:

Вполне возможно, что окно с истекшим сроком действия сессии не имеет решающего значения для пользователя, возвращающегося на страницу, на которую он пришел с предварительной повторной аутентификации. Одна из целей здесь состоит в том, чтобы сделать пользовательский опыт как можно более нетронутым. Хотя обычному пользователю этого сайта может даже не нравиться экран сбоя, он все же предвидит его, и переход с частного сайта на простую страницу «имя пользователя / пароль» будет отвлекать и даже беспокоить некоторых пользователей.

1 Ответ

0 голосов
/ 14 июля 2009

Мне пришло в голову одно решение, но мне все еще нужно сгладить ошибки:

Поскольку начало сеанса хранится в cookie, у меня может быть функция, которая перед любым ajax-запросом проверяет, установлен ли срок действия cookie. Если это так, я могу просто перезагрузить страницу, на которой они находятся, используя тот же URL, и это попадет на страницу с истекшим сроком действия сессии.

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