在Android上从assets目录中的HTML文件设置Webview cookies

4
我正在尝试在Webview中使用JavaScript设置Cookie。Webview是从本地资产目录加载的,如下所示(其中page是字符串,例如“index.html”):
engine.loadUrl("file:///android_asset/" + page);

我发现当从网络加载完全相同的文件时(例如http://www.domain.com/index.html),同样的文件可以按预期设置cookie。
旧版Android确实允许在本地文件上创建cookie,但是新版本不行。我已经测试过了,在三星Galaxy Ace、HTC Desire Z和较低SDK的eclipse模拟器上可以工作,但在三星SIII和三星Tab 10.1上无法工作。
我需要设置cookie以在我的Webview页面之间传递数据;保存搜索结果以便重新显示。
如果有人知道任何方法/黑客来解决这些本地文件问题,我真的非常感激。我已经做了大约8周了。我问过一个类似的问题,可能有助于进一步阅读,但问题现在已被确认,非常不同,所以我在这里提出了这个问题。Android webview cookie returns null 谢谢。

我知道这个问题很久以前就被问过了,但你现在找到解决方案了吗? - Hamid
问题是由于修复安全问题而引起的。允许任何应用程序在“localhost”域下存储cookie。这实际上意味着任何人都可以创建一个应用程序来从同一cookie存储中读取/写入。因此,Android在后续版本中阻止了此操作。请参阅我的类似问题:https://dev59.com/bHfZa4cB1Zd3GeqPU7XK - kirgy
2个回答

1
这是因为在本地主机上实现cookie时存在安全限制。如果可以设置cookie,则其他人也可以创建应用程序并读取您的应用程序cookie。这在早期版本的Android上曾经是可能的,但后来的安全漏洞被修补了。
这就是为什么传统的Web浏览器也存在同样的限制。
请参见相关问题和答案: Android webview cookie returns null

0

我曾经处理过一个类似于你描述的用例,这是我采取的方法

  • 每当我需要直接在Cordova WebView上设置cookie(例如文件方案cookie)时:

    CookieManager.getInstance().setCookie("/", "MyCookie=xxx");
    
  • 当JS库创建文件方案cookie(因为它们是从文件系统加载的),而我需要在“本地”层获取这些值时,我会使用:

    CookieManager.getInstance().getCookie("file://");
    

后者将返回所有文件方案 cookie 的长字符串,您可以将其拆分为数组并逐个解析。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接