關於angular2中,使用session處理

来源:http://www.cnblogs.com/fantasy-si/archive/2017/11/30/7932818.html
-Advertisement-
Play Games

在angular中,使用session處理 源碼如下: typescript import { Injectable } from '@angular/core'; import { AES, enc } from 'crypto js'; import { has, isNull, isUndef ...


在angular中,使用session處理

源碼如下:

import { Injectable } from '@angular/core';
import { AES, enc } from 'crypto-js';
import { has, isNull, isUndefined, isNaN, each } from 'lodash';

@Injectable()
export class SessionService {

    private json: Object = {};
    private tobeLocalSavedJson: Object = {};
    private tobeSessionSavedJson: Object = {};
    private timeoutId: any;

    /**
     * 得到session的值
     * @param {string} key
     * @returns {any}
     */
    public get(key: string): any {
        console.debug('begin get(),key is %s', key);
        if (has(this.json, key)) {
            try {
                let valueStr = sessionStorage.getItem(key) || localStorage.getItem(key);
                if (valueStr) {
                    this.json[key] = JSON.parse(AES.decrypt(valueStr, key)
                        .toString(enc.Utf8));
                }
            } catch (e) {
                console.error(`localStorage access denied!`);
                return null;
            }
            return this.json[key];
        }
    }

    /**
     * 添加session
     *
     * @param {string} key
     * @param value
     * @param {boolean} isPersistence
     */
    public put(key: string, value: any, isPersistence?: boolean): void {
        isPersistence = isPersistence || false;
        if (isNull(value) || isUndefined(value) || isNaN(value)) {
            this.remove(key);
            return;
        }
        this.json[key] = value;
        if (isPersistence) {
            this.tobeLocalSavedJson[key] = value;
        } else {
            this.tobeSessionSavedJson[key] = value;
        }
        try {
            this._delaySave();
        } catch (e) {
            console.error(`localStorage access denied!`);
        }
    }

    /**
     * 清除所有session
     * @param {boolean} isAlsoClearPersistent
     */
    public clear(isAlsoClearPersistent?: boolean) {
        this.json = {};
        try {
            sessionStorage.clear();
        } catch (e) {
            console.error(`localStorage access denied!`);
        }
        if (isAlsoClearPersistent) {
            try {
                localStorage.clear();
            } catch (e) {
                console.error(`localStorage access denied!`);
            }
        }
        this.tobeLocalSavedJson = {};
        this.tobeSessionSavedJson = {};
    }

    /**
     * 移除對應key的session
     * @param {string} key
     */
    public remove(key: string) {
        delete this.json[key];
        delete this.tobeSessionSavedJson[key];
        delete  this.tobeLocalSavedJson[key];

        try {
            sessionStorage.removeItem(key);
            localStorage.removeItem(key);
        } catch (e) {
            console.error(`localStorage access denied!`);
        }
    }

    private _delaySave(): void {
        clearTimeout(this.timeoutId);
        this.timeoutId = setTimeout(() => {
            try {
                this.saveToStorge(this.tobeLocalSavedJson, localStorage);
                this.saveToStorge(this.tobeSessionSavedJson, sessionStorage);
                this.tobeLocalSavedJson = {};
                this.tobeSessionSavedJson = {};
            } catch (e) {
                console.error(`localStorage access denied!`);
            }
        }, 100);
    }

    private saveToStorge(json, storge) {
        each(json, (value: any, key: any) => {
            let encryptValue = AES.encrypt(JSON.stringify(value), key);
            try {
                storge.setItem(key, encryptValue);
            } catch (e) {
                console.error(`localStorage access denied!`);
            }
        });

    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 各位朋友好,本章節我們繼續講第五個設計模式。 在生活中,我們都知道手機記憶體卡是無法直接接電腦的,因為記憶體卡的卡槽比較小,而電腦只有USB插孔,此時我們需要用到讀卡器。這個讀卡器就相當於是適配器。這是生活上的適配器,那麼在OO對象中,適配器就是將一個介面轉換成另一個介面,使得客戶可以使用。 適配器模式 ...
  • 一、背景&問題 之前框架是一個基於SOA思想設計的分散式框架。各應用通過服務方式提供使用,服務之間通信是RPC方式調用,具體實現基於.NET的WCF通信平臺。框架存在如下2個問題: 1、高併發處理能力不足。一當高併發請求,可能出現多個服務待定處理,導致整個系統出現瓶頸。 2、隨著移動端廣泛應用,服務 ...
  • 上一章我們學習了裝飾者模式,這章LZ帶給大家的是單例模式。 首先單例模式是用來幹嘛的?它是用來實例化一個獨一無二的對象!那這有什麼用處?有一些對象我們只需要一個,比如緩存,線程池等。而事實上,這類對象只能有一個示例,如果製造多個示例,就會導致許多問題產生,比如程式的行為異常,資源使用過量。而單例模式 ...
  • ////發表時間(now) function p(s) { return s < 10 ? '0' + s : s; } var myDate = new Date(); //獲取當前年 var year = myDate.getFullYear(); //獲取當前月 var month = myD ...
  • 原文地址: "簡潔後臺管理模版" 之前給客戶開發一個簡單的後臺管理系統,本來準備套用AdminLTE的,但客戶嫌棄太臃腫,而且又需要有多tab頁面切換,於是從我代碼庫中找到好久前就寫過的管理後臺,根據需求重寫。這是基於jQuery,加上自己編寫基礎樣式,從零搭建起來的框架,在這個輕量級模版的基礎上進 ...
  • 網上找了很多版本嘗試都不行,最後在stackoverflow上找到一個,嘗試完美解決 具體操作步驟如下 1. 安裝jquery npm install jquery 2.安裝 type for jquery npm install -D @types/jquery 3.在組件中使用jquery im ...
  • 1.main.js 2.fs模塊,讀寫文件 3.http請求模塊 4.schedule.js, 任務調度模塊 5.sendQQemail.js,發送QQ郵件模塊 6.先簡單記錄下,以後有空再詳細說明 ...
  • MVVM是一種前端框架模式,框架模式主要是用來管理與組織代碼,在複雜應用中,利用高內聚低耦合的思想,將代碼分離組織到不同部分,每部分都有其關註點和職責,各部分間耦合度低,達到“關註點分離”目的,使整個應用更易管理、維護,每個部分可以單獨更新、替換以及復用,從而達到整個應用的模塊化。 一、概念 MVV ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...