Как управлять входом и выходом из нескольких учетных записей на разных страницах браузера? - PullRequest
2 голосов
/ 02 марта 2010

У меня есть веб-сайт, построенный на App Engine (Java), и мне нужно, чтобы пользователь использовал учетную запись Google для входа в систему.

Ситуация такова:

  1. Пользователь Адам имеет несколько учетных записей.
  2. Пользователь Adam входит в систему с учетной записью Adam1 и получает его Adam1 данные на странице браузера A.
  3. Он щелкнул ссылку выхода из системы, но открыл ее на другой вкладке B (тот же браузер, конечно)
  4. Он входит в систему с другой учетной записью Адам2 на странице браузера B получает свои Адам2 показанные данные.
  5. Затем он вернулся на страницу браузера A и внес некоторые изменения в свои данные, а затем отправил их на сервер, в это время мое приложение распознало бы, что текущий пользователь Adam2 , и изменения будут приняты Adam2 , статус не соответствует текущей странице A, наш пользователь может быть сбит с толку.

Я подумал, что, возможно, я смогу присоединить параметр userID при выполнении запроса на изменение на сервере, и серверная сторона сравнит текущий идентификатор пользователя с этим параметром userID, чтобы обработать запрос на изменение, или вернет команду обновления, чтобы сделать вне страница даты будет обновлена ​​до текущей учетной записи, если идентификаторы не совпадают.

Как лучше всего справляться с этой ситуацией?

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Предположительно, пользователь будет идентифицирован по идентификатору сеанса, который отправляется как информация о файлах cookie. У Адама на сайте А будет другой идентификатор сеанса, чем у Адама на сайте Б из-за разного логина. Также предположительно страница формы будет защищена таким образом, что для доступа к ней необходимо войти в систему.

Когда Адам выходит из системы на странице B, старый сеанс уничтожается на сервере и логин становится недействительным. Когда Адам отправляет форму со страницы А, браузер не знает, что это произошло, и отправит форму вместе со старым идентификатором сеанса. Сервер будет (должен) отклонить эту отправку, поскольку сеанс уже истек.

Следовательно, в правильно закодированной системе управления сеансами / пользователями это становится проблемой. Критическая точка заключается в обновлении / аннулировании идентификатора сеанса при выходе из системы.

1 голос
/ 02 марта 2010

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

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