Сохранить пользовательский объект в хранилище сеансов

Я использую Angular 2 и Typescript и хотел сохранить пользовательский объект как глобальную переменную, чтобы его не нужно было извлекать несколько раз. Я нашел хранилище сессий и теперь сохраняю там пользовательский объект.

Считаете ли вы, что это хорошая практика, чтобы хранить его там, или данные слишком чувствительны? Если да, то какой другой вид кеша я мог бы использовать?

Вот код, который я использую прямо сейчас:

user.service.ts:

getProfile() {
    let cached: any;
    if (cached = sessionStorage.getItem(this._baseUrl)) {
        return Observable.of(JSON.parse(cached));
    } else {
        return this.http.get(this._baseUrl).map((response: Response) => {
            sessionStorage.setItem(this._baseUrl, response.text());
            return response.json();
        });
    }
}

getProfile() вызывается в app.component, когда ngOnInit(). Пользовательский объект также необходим в других компонентах приложения.


person sanyooh    schedule 10.01.2017    source источник
comment
Почему не пользуетесь услугами?   -  person Igor Janković    schedule 10.01.2017
comment
Я пользуюсь сервисом. Я могу добавить свой код.   -  person sanyooh    schedule 10.01.2017
comment
Вы можете использовать локальное хранилище, которое в качестве хранилища сеанса доступно только на текущей вкладке, но сохраняется после закрытия (вам придется явно удалить его). Более подробная информация о различиях между ними здесь stackoverflow. ком/вопросы/5523140/   -  person theFreedomBanana    schedule 10.01.2017


Ответы (2)


Это нормально иметь безопасные/конфиденциальные данные в хранилище сеансов.

Поскольку хранилище сеансов доступно только для текущей таблицы и домена...

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

Если вы хотите узнать больше, посетите sessionStorage.

person Pankaj Badukale    schedule 10.01.2017

Вы можете либо использовать sessionStorage, либо использовать service.

Ваш interface:

export interface ISession {
    session:Object
}

Ваш фактический service класс:

    import {Injectable} from '@angular/core';

    @Injectable()
    export class SessionService implements ISession {    
        private _session: session

        constructor(){

        }

        set session(value){
            this._session = value;
        }

        get session(){
            return this._session
        }
   }

Теперь вы можете внедрить этот класс SessionService в другой класс constructors и использовать его.

person Thalaivar    schedule 10.01.2017
comment
Я собираюсь попробовать! - person sanyooh; 12.01.2017
comment
это будет отображаться как undefined, пока я не перестану использовать localStorage или sessionStorage, верно? - person Bharat; 25.04.2018
comment
Это служба, поэтому технически, если вы ничего не установите, она будет неопределенной... если не установлено значение по умолчанию. - person Thalaivar; 28.04.2018
comment
но что будет делать с этими данными жесткое обновление на вкладке браузера ??? Вы также можете объяснить использование localStorage - person Manu Mohan Thekkedath; 15.07.2018
comment
Если пользователь введет URL-адрес другого маршрута (не щелкнув ссылку маршрутизатора), я думаю, что эта служба будет запущена снова, что означает, что предыдущие установленные значения будут потеряны. - person Stephen Zeng; 30.07.2018