在 HTML5 iOS 应用程序中安全地存储数据 - localStorage / WebSQL / IndexedDB 合适吗?
Posted
技术标签:
【中文标题】在 HTML5 iOS 应用程序中安全地存储数据 - localStorage / WebSQL / IndexedDB 合适吗?【英文标题】:Safely storing data in a HTML5 iOS application - are localStorage / WebSQL / IndexedDB appropriate? 【发布时间】:2011-12-02 00:12:13 【问题描述】:我正在编写一个 html5 应用程序,我想在 ios 应用商店上发布。使用 PhoneGap 或包装在 UIWebView 控件中。
我对在为我的应用程序存储数据方面有哪些选择感到有些困惑。
是否使用适合在此类应用程序中存储应用程序数据的 localStorage、WebSQL 或 IndexedDB 技术?我将存储 JSON 和 XML 数据。
请记住,如果用户无意中删除了这些数据,那么他们将丢失他们的工作,这显然是我不希望发生的。
我知道减轻这种风险的唯一真正方法是将数据同步到“云”或其他在线系统 - 我可以在未来的版本中这样做,但不是现在。最初我只想在本地存储数据,如果这是一种合理稳定的做事方式。
据我了解,在清除 cookie 时,浏览器也会清除所有 localStorage 数据。所以排除了这种情况,因为我可以看到用户偶然这样做。
WebSQL 看起来不错——用户不会在 iOS 上无意中删除它。他们实际上必须进入浏览器设置并手动删除数据库。
但 WebSQL 的缺点是,从我读到的内容来看,它将来可能不会被支持。
使用 IndexedDB,我不清楚数据何时被清除。当 cookie 被删除时它是否也会被删除,或者 Safari 设置中的“数据库”选项是否控制它?
IndexedDB 是不是更好的解决方案,因为它将来会比 WebSQL 有更好的支持?
还有其他我不知道的更合适的解决方案吗?
【问题讨论】:
【参考方案1】:localStorage
(又名 Web 存储)和 WebSQL 在除 Opera Mini 之外的所有当前移动浏览器上均受支持。
然而,截至 2010 年 11 月,WebSQL 被认为“已死”。规范上有一个很大的“小心”标签。 It reads:
本文档在 W3C 推荐轨道上,但规范工作已停止。规范陷入僵局: 所有感兴趣的实现者都使用了相同的 SQL 后端(Sqlite), 但是我们需要多个独立的实现来进行 标准化路径。
就移动浏览器而言,截至 2013 年 12 月,IndexedDB 仅在 android 4.4 中受支持(这意味着不支持 iOS Safari、Opera Mini/移动或广泛的 Android 浏览器)。
有关最新的兼容性表,请参阅 caniuse.com。
【讨论】:
【参考方案2】:如果您使用 PhoneGap(或 AppMobi - 我工作的地方)进行包装,您的数据将被分段到该应用程序。用户无法进入 Safari 并清除浏览器数据/cookie 并在您的应用程序中发生这种情况。他们可以删除它的唯一方法是删除应用程序。
我认为 IndexedDB 不可用。 Window.localStorage 是(5 兆,但我认为它可以增长),这是一个 KVP 系统。
我看他们几年都不会放弃 WebSQL。 HTML5 规范甚至还没有被批准,所以事情可能会再次发生变化。
由于您只是存储字符串,因此您可以查看像 Lawnchair 这样的库,它们将使用不同的适配器(localStorage、WebSQL 等)以您想要的方式存储您的数据,因为您似乎没有复杂的数据集。
【讨论】:
谢谢,我不知道如果使用包装库,存储会被分割到该应用程序。这解决了我的问题。 window.localStorage 是 5 Mb,但由于 iOS 将数据存储为 UTF-16,它实际上是 2.5 Mb。 localStorage 也不能在 iOS 上增长。 @Stevo3000 您可以通过将字符串转码为 UTF-8 来解决这个问题,这只是使用 javascript 的几行代码。以上是关于在 HTML5 iOS 应用程序中安全地存储数据 - localStorage / WebSQL / IndexedDB 合适吗?的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 从 ios 应用程序以加密形式将信用卡/借记卡存储在服务器上,然后再次从应用程序解密。我怎样才能最安全地管理它?
将用户提供的 URL 数据安全准确地插入 HTML5 文档的正确方法是啥?
[html5]localStorage的原理和HTML5本地存储安全性