Я использую GWT для своего клиентского приложения. Я не использую GWT / Java для сервера. Однако я не уверен, как справиться с управлением сеансом. Приложение GWT находится на одной странице, все вызовы сервера выполняются через AJAX. Если сеанс истекает на сервере ... предположим, что пользователь не закрыл браузер, но оставил приложение открытым, как мой сервер может уведомить приложение о том, что сеанс истек, и что на стороне клиента должен отображаться экран входа в систему очередной раз?
Что подразумевается под управлением сеансом на стороне клиента? Это кажется небезопасным по своей сути.
Я не ищу код. Я ищу идеи, методы, потенциальные решения и т. д. Я рассматривал Comet http://en.wikipedia.org/wiki/Comet_(programming), но не похоже, что она будет работать очень хорошо без использования Java на стороне сервера. Может я ошибаюсь? Я тоже не хочу опрашивать сервер.
Есть мысли или идеи?




Что должно произойти, если срок сеанса истек на стороне сервера, тогда в следующий раз, когда клиент отправит запрос на сервер, он либо создаст новый сеанс, либо, что более вероятно, отправит обратно клиенту сообщение, которое он пытается для доступа к странице без сеанса и отправки их на экран входа в систему. Однако вам все равно придется подождать, пока клиент отправит сообщение на сервер.
Не зная, как у вас работает ваш RPC, трудно дать хороший совет.
Если ваша служба AJAX требует аутентификации пользователя (IE имеет действующий сеанс), можно просто отправить ошибку 401, в которой говорится, что пользователь недействителен. Клиентская сторона может интерпретировать ошибку 401 как сообщение о том, что она должна настроить пользователя на повторную аутентификацию.
Мы справились с этим в нашем приложении, обнаружив, когда сервер отправил обратно перенаправление на экран входа в систему (это будет через ответ на вызов Ajax), и появилось диалоговое окно, запрашивающее у пользователя пароль снова, но предварительно заполненное их имя пользователя. Затем мы разместили это в том же месте, что и страница входа, как если бы это была страница входа, и поэтому пользователь автоматически вошел в этот новый сеанс. Наконец, мы просто повторно отправили вызов ajax еще раз, так что это был простой процесс для пользователя (например: им не нужно было снова щелкать действие).
Поскольку мы сохранили все состояние на клиенте, а не в переменных сеанса, у нас не было проблем с попыткой сохранить данные между сеансами.
Я не использую RPC, объект запроса GWT - это просто оболочка вокруг XMLHttpRequest. Отличная идея! Никогда не думал об изменении кода статуса http. Возможно, я этим воспользуюсь.