首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SStorage (记住)- v0

SStorage (记住)- v0
EN

Code Review用户
提问于 2012-12-20 20:47:18
回答 2查看 121关注 0票数 1

寻找关于这个模块的一般反馈。remember是用户在登录时通过单击“记住我”来设置的属性。

令牌标识用户- h_token。如果设置了localStorage.h_token,则假定用户已单击“记住我”,这将在加载时进行检查。

当用户手动更改记忆状态时,将调用setRemember()

目前不寻求任何安全问题或命名约定方面的建议,这不是一个问题。

只是一般的事情。

代码语言:javascript
复制
/*SClientStorage
** 
** 
**
*/
SStorage = NS.support({
    Name: 'Storage',
    hold: {},
    clientStorage: localStorage.h_token ? localStorage : sessionStorage,
    setRemember: function (remember) {
        this.clientStorage = remember ? localStorage : sessionStorage
    },
    clear: function () {
        this.clientStorage.clear();
    },
    setAll: function (o) {
        var key;
        for (key in o) {
            if (o.hasOwnProperty(key)) {
                this.clientStorage[key] = o[key];
            }
        }
    },
    getAll: function () {
        var o = {},
            key;
        for (key in this.clientStorage) {
            if (this.clientStorage.hasOwnProperty(key)) {
                o[key] = this.clientStorage[key];
            }
        }
        return o;
    },
    set: function (key, value) {
        this.clientStorage[key] = value;
    },
    get: function (key) {
        return this.clientStorage[key];
    }
});
EN

回答 2

Code Review用户

回答已采纳

发布于 2012-12-26 00:28:57

看上去真的很好。很清楚,也很容易理解。关于这个具体的实现,我想到了几件事:

  • setRemember()中,除非您只想支持值10,否则代码可以更改为:
    • this.clientStorage = remember ? this.localStorage : this.sessionStorage;

  • setRemember()中,当切换存储机制时,将旧机制中的值复制到新机制中可能是有意义的,这样用户以前设置的任何内容都将被保留。类似地,如果用户正在从localStorage转换为sessionSorage,那么清除旧的存储机制也有意义吗?如果进行任何这些更改,该方法还可以首先将新值与旧值进行比较,并且只有在实际发生更改时才会继续。
  • olog()方法中的用途是什么?
  • log()方法中,根据用于日志记录的实用程序的不同,可以考虑同时记录整个对象,因为许多控制台/日志记录实用程序将允许您检查对象。这有时可以提供更多的信息,尽管这里只提供更方便的内容,因为无论如何,所有的值都是字符串。如果使用此路径,可以将当前函数重命名为类似于logEach()的内容。
  • clear()的执行过程中,您是否应该预置h_token密钥?

退一步,这里是实用程序的另一个API。只是大声地想出来。

  • ssn(key) -检索一个值。get()的同义词
  • ssn(key, value) -设置一个值。set()的同义词
  • ssn(obj) -设置来自obj的所有值。setAll()的同义词
  • ssn.clear() -不变。
  • ssn.clone() - getAll()的同义词
  • ssn.log() -如前所述,将clientStorage对象作为一个整体记录下来。
  • ssn.logEach() -记录每个属性和相应的值,每次一个。
  • ssn.remember() -检索当前remember设置。
  • ssn.remember(value) -设置remember值。setRemember()的同义词

最后一个想法是,您可能希望实现某种“命名空间”类型的功能,以便能够区分为不同用户保存的设置。我建议这样做并不是出于安全考虑,而是从用户体验的角度。我认为,按照设置的方式,同一台计算机上的多个用户将合并他们的设置,这可能会让人感到困惑。

票数 2
EN

Code Review用户

发布于 2013-01-03 12:42:22

替换

代码语言:javascript
复制
if(remember === '1') {
    this.clientStorage = localStorage;
} else if(remember === '0') {
    this.clientStorage = sessionStorage;
}

使用

代码语言:javascript
复制
this.clientStorage = [localStorage, sessionStorage][parseInt(remember)]

注:蒂芬的

代码语言:javascript
复制
this.clientStorage = remember ? this.localStorage : this.sessionStorage

工作非常好,很好,简洁,没有混乱的事情发生。但是,如果您必须添加另一个选项,例如'2‘、'3’、'4‘,那么我的代码更适合。

替换

代码语言:javascript
复制
var key;
for (key in o) {

使用

代码语言:javascript
复制
for (var key in o) {
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/19825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档