Angular 4 с ngrx и sessionStorrage на ie11

У меня есть приложение angular 4, основанное на ngrx. Моя информация извлекается из конечной точки с помощью перехватчика angular, и он сохраняет токен в sessionStorage для обновления каждого HTTP-вызова.

Каким-то образом я вижу, что в ie11, в локальном приложении angular-cli, вся информация в порядке. Все звонки в идеале. Если я вхожу в систему и использую некоторые данные из API, затем выхожу из системы и снова вхожу в систему с другим пользователем, вся информация обновляется в соответствии с зарегистрированным пользователем.

НО, в том же приложении, добавленном на сервер, если я войду в систему и получу некоторые данные, затем выйду из системы, а затем войду снова с другим именем пользователя, я получаю все данные первого зарегистрированного имени пользователя. В то же время, если я просто закрываю браузер (не вкладку), обычно он обновляется.

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

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

Вопрос: Кто-нибудь знает, есть ли у методов sessionStorage какие-то проблемы с методом getItem или setItem, или кто-нибудь знает, в чем должна быть проблема?

Спасибо!


person Eduard Omusoru    schedule 16.01.2018    source источник
comment
Сохраняется ли локальное состояние в ngrx? Похоже, локальное состояние используется повторно, а не из хранилища сеансов.   -  person Ringo    schedule 18.01.2018


Ответы (2)


Мне удалось найти проблему. Похоже, что Internet Explorer 11 создает кеш для каждого запроса, который повторяется с одного и того же сервера. Это работало на моей локальной машине, потому что вызов был сделан с локального хоста на сервер, а не с сервера на себя. Мне пришлось заставить каждый вызов быть новым без кеша от перехватчика.

Спасибо!

Надеюсь, это поможет любому!

person Eduard Omusoru    schedule 19.01.2018

Internet Explorer получает данные из кеша после каждого вызова GET, вы должны предотвратить получение данных из кеша, я добавил это в заголовок http, и он отлично работает:

const apiHeaders = new HttpHeaders({ 'Content-Type': 'application/json',
 'Cache-control': 'no-cache, no-store, must-revalidate',
 'Pragma': 'no-cache',
 'Expires': '-1'
 });

...
...
return this.http.get(uri, { headers: apiHeaders}):
...
person Fateh Mohamed    schedule 22.06.2018