• html5 sessionStorage util


     

      

    /**
     * Created by 13352 on 2018/7/5.
     */
    define(function() {
        var session = {
            _id: null,
            _cookieCache: undefined,
            _init: function() {
                if (!window.name) {
                    window.name = Math.random();
                }
                this._id = window.name;
                this._initCache();
    
                // See if we've changed protcols
                var matches = (new RegExp(this._generatePrefix() + "=([^;]+);")).exec(document.cookie);
                if (matches && document.location.protocol !== matches[1]) {
                    this._clearSession();
                    for (var key in this._cookieCache) {
                        try {
                            if (this._cookieCache.hasOwnProperty(key)) {
                                window.sessionStorage.setItem(key, this._cookieCache[key]);
                            }
                        } catch (e) {
                            console.error(e);
                        }
                    }
                }
                document.cookie = this._generatePrefix() + '=' + document.location.protocol + ';path=/;expires=' + (new Date((new Date).getTime() + 120000)).toUTCString();
            },
            _generatePrefix: function() {
                return '__session:' + this._id + ':';
            },
            _initCache: function() {
                var cookies = document.cookie.split(';');
                this._cookieCache = {};
                var self = this;
                cookies.forEach(function(cookie) {
                    var kv = cookie.split('=');
                    if ((new RegExp(self._generatePrefix() + '.+')).test(kv[0]) && kv[1]) {
                        self._cookieCache[kv[0].split(':', 3)[2]] = kv[1];
                    }
                });
            },
            _setFallback: function(key, value, onceOnly) {
                var cookie = this._generatePrefix() + key + "=" + value + "; path=/";
                if (onceOnly) {
                    cookie += "; expires=" + (new Date(Date.now() + 120000)).toUTCString();
                }
                document.cookie = cookie;
                this._cookieCache[key] = value;
                return this;
            },
    
            _getFallback: function(key) {
                if (!this._cookieCache) {
                    this._initCache();
                }
                return this._cookieCache[key];
            },
    
            _clearFallback: function() {
                for (var i in this._cookieCache) {
                    document.cookie = this._generatePrefix() + i + '=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
                }
                this._cookieCache = {};
            },
    
            _deleteFallback: function(key) {
                document.cookie = this._generatePrefix() + key + '=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
                delete this._cookieCache[key];
            },
            get: function(key) {
                return window.sessionStorage.getItem(key) || this._getFallback(key);
            },
            set: function(key, value, onceOnly) {
                try {
                    window.sessionStorage.setItem(key, value);
                } catch (e) {}
                this._setFallback(key, value, onceOnly || false);
                return this;
            },
            del: function(key) {
                return this.remove(key);
            },
            remove: function(key) {
                try {
                    window.sessionStorage.removeItem(key);
                } catch (e) {
                    console.error(e);
                }
                this._deleteFallback(key);
                return this;
            },
            _clearSession: function() {
                try {
                    window.sessionStorage.clear();
                } catch (e) {
                    for (var i in window.sessionStorage) {
                        window.sessionStorage.removeItem(i);
                    }
                }
            },
            clear: function() {
                this._clearSession();
                this._clearFallback();
                return this;
            }
        };
        session._init();
    
        return session;
    });
    

      

      config.js

    // https://requirejs.org/docs/release/2.1.11/comments/require.js
    // https://requirejs.org/docs/release/2.1.11/minified/require.js
    require.config({
        paths : {
            "jquery-1.10.2" : "../assets/js/jquery",
            "jquery-ui": "../assets/jqui/jquery-ui",
            // "jquery": "../assets/bootstrap/js/jquery-3.3.1.min",
            "jquery": "../assets/ckeditor/js/jquery-3.2.1",
            "ckeditor-core": "../assets/ckeditor/ckeditor",
            'ckeditor-jquery': "../assets/ckeditor/adapters/jquery",
            "jquery-cookie": "../assets/js/jquery.cookie",
            "bootstrap": "../assets/bootstrap/js/bootstrap",
            "alert": "js/lib/alert",
            "supersized": "../assets/js/login/supersized.3.2.7",
            "url-param": "js/util/getUrlParam",
            'image-preview': 'js/util/preview',
            'cropbox': "../assets/cropbox/cropbox",
            'session': "js/util/session"
        },
        shim: {
            'ckeditor-jquery':{deps:['jquery','ckeditor-core']},
            'jquery-cookie': {deps: ['jquery']},
            'bootstrap': {deps: ['jquery']},
            'jquery-ui':{deps: ['jquery']},
            'supersized': {deps: ['jquery']},
            'cropbox': {deps: ['jquery']}
        }
    });
    

      

      Usage:

    require(['session'], function(session) {
        session.set('schoolName', '许昌市家里蹲大学');
        var schoolName = session.get('schoolName');
        console.log(schoolName);  // 许昌市家里蹲大学
    
        session.set('a', JSON.stringify({a:1,b:2}));
        var a= session.get('a');
        console.log(a);  // {"a":1,"b":2}
    });
    

      

  • 相关阅读:
    .NET中的一些设计模式
    (原创)无废话C#设计模式之三:Abstract Factory
    一步一步学Linq to sql(一):预备知识
    使用主题来自动包装控件样式
    (原创)无废话C#设计模式之六:Builder
    (原创)无废话C#设计模式之四:Factory Method
    当前匿名用户和当前连接的区别
    单一登陆的例子
    使用rar.exe压缩的例子
    (原创)无废话C#设计模式之九:Proxy
  • 原文地址:https://www.cnblogs.com/mingzhanghui/p/9266796.html
Copyright © 2020-2023  润新知