【问题标题】:localStorage same index name in another applocalStorage 另一个应用程序中的相同索引名称
【发布时间】:2017-04-13 14:10:41
【问题描述】:

我正在使用 ionic/cordova 开发应用程序,并且已经多次使用 localStorage。 比如我有这样一个东西:

window.localStorage['is_user_paid'] = 1;

所以,如果用户付钱,我设置这个localStorage 项目。

现在,如果另一个应用程序将此设置为 1,并在设备中运行,我的应用程序是否假定用户真正获得了报酬?是否有必要使用像 2afjx8y_is_user_paid 这样的应用程序密钥?有什么想法吗?

【问题讨论】:

    标签: html cordova local-storage


    【解决方案1】:

    我曾经通过在我的应用程序中创建一个唯一标识符(不是存储在代码中,而是存储在数据存储中)来解决这个问题,并且我会在访问本地存储时使用它。

    代码足够可预测,逻辑才是最重要的:

    • 在您的数据存储区(或无法通过 URL 读取的文件,例如在 GAE 中可能是 app.yaml 文件等)中创建一个值,用作唯一 ID。如果需要,您可以手动执行此操作。生成某种 GUID 并存储它。不要将它放在您的开发代码中或将其硬编码到 JS 页面中,确保它在旁边(除非您不在乎,但您可能应该这样做)。
    • 每当您访问本地存储时,无论是获取还是放置,都可以通过检索该信息的函数运行它(或者已经在引导应用程序的过程中检索了该信息,无论您的上下文是否适用),然后将其添加到您的任何内容之前'正在呼叫你的钥匙。

    这样您就可以继续编码,就像您只是使用一个易于理解的密钥一样,例如“user_name”,但存储/检索的密钥看起来像“abd12342Baa345324w3423sdfs323DD_user_name”。

    如果愿意,您可以不时更改该密钥,设置您的代码,以便如果它使用旧密钥检索“用户名”,您将其换成新密钥并照常继续您的操作。

    我在工作中为生产中的应用程序执行此操作,并且它被认为是一种合法的方法。我从一篇 GAE 文章中获得了该方法,该文章展示了如何在不将它们放入代码中的情况下为 Google 登录存储和检索客户端令牌;您甚至可以为 dev/qa/prod 和其他任何东西存储该 UID 的不同版本。它并不特定于 GAE,这个概念应该适用于任何环境。

    当然,如果该项目的另一位开发人员决定使用相同的功能和相同的 GUID,那么问题就会转移。不过,一点点纪律可以解决这个问题,我在该 util 函数上方添加了一条评论,我们从来没有遇到过问题。

    【讨论】:

    • 非常感谢。但是@Kerri 的回答更适合科尔多瓦。在浏览器(网络应用程序)中工作时你是对的。最后我在一个真实的设备上进行了测试,并提醒了相同的localStorage 索引。它提醒undefined
    【解决方案2】:

    在 Cordova 下运行时,localStorage 被沙盒化到您的应用程序中;没有其他应用可以看到您应用的localStorage 中的内容,也无法更改内容。同样,您的应用只能看到自己的 localStorage 内容。

    现在,沙盒化并不意味着用户无法读取/编辑,这就是为什么不要将密码之类的东西存储在 localStorage 中非常重要的原因——文件本身大部分是人类可读的,并且可以通过以下方式轻松访问您的最终用户。但是,应用程序 无法访问除它们自己之外的任何localStorage

    注意:当来自同一家公司的应用程序需要共享数据时,有一些方法可以解决这个问题,但它们涉及不同的存储机制。)

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 2020-11-13
      • 2014-04-25
      • 2016-08-24
      相关资源
      最近更新 更多