首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VM宽cookie管理是什么意思?

VM宽cookie管理是什么意思?
EN

Stack Overflow用户
提问于 2018-03-16 13:50:09
回答 1查看 470关注 0票数 8

我正在学习在安卓系统中存储cookies,并找到了实现它的几种方法。其中之一就是使用CookieManager and CookieStore

在浏览Android文档时,我看到了以下声明:

为了在客户机和服务器之间建立和维护一个潜在的长时间会话,HttpURLConnection包括一个可扩展的cookie管理器。使用CookieHandler和CookieManager启用VM范围的cookie管理:

代码语言:javascript
复制
CookieManager cookieManager = new CookieManager();  
CookieHandler.setDefault(cookieManager);

我不明白VM-wide cookie management的意思。我知道VM的意思是Virtual Machine

My的解释:

  1. 我解释它的一种方法是,创建一个将其传递给CookieManager__and setDefault() ,使其在整个应用程序中都可用。因此,我尝试了下面的方法来测试它。 url =新URL (“http://something.com"”);URI uri=new uri(“http://something.com"”);urlConnection = (HttpURLConnection) url.openConnection();urlConnection //cks是字符串cookieManager=new CookieManager();CookieHandler.setDefault(cookieManager);HttpCookie hc=new HttpCookie("Cookie1",cks);cookieManager.getCookieStore()Cookie1(uri,hc);cks1=cookieManager.getCookieStore().getCookies().get(0).getValue();//cks 1是另一个字符串。 我将cks and cks1设置为TextViews,并按预期打印cookie content/value。根据我的解释,我在另一个活动中尝试了cookieManager.getCookieStore().getCookies().get(0).getValue();,但它没有识别对象,这意味着它超出了范围,无法访问。另外,创建了一个新的CookieManager并尝试获取cookie,但它返回了null。因此,我假设这种跨活动访问VM范围的解释是不正确的。
  2. CookieManager 被设置时,第二解释Cookies将自动存储。我是从另一个问题的解决方案中得到的: https://stackoverflow.com/questions/29662349/cookie-management-with-java-urlconnection/29663011#comment85627325_29663011

解决方案中的一项说明提出了这样的建议:

当HttpURLConnection从服务器接收到cookie时,CookieManager将接收该cookie并存储它。将来对同一服务器的请求将自动发送先前设置的cookie。

我删除了cookieManager.getCookieStore().add(uri,hc);来测试它,发现cookies不是自动存储的。所以,这种解释也失败了。

另一个困扰我的疑问:

存储cookies供以后使用的大多数解决方案都建议使用SharedPreferences。困扰我的是,他们都最初在CookieManager中存储cookie,然后将其转移到SharedPreferences中。为什么不直接使用SharedPreferences呢?

例如:

代码语言:javascript
复制
URL url = new URL("http://something.com");
 urlConnection = (HttpURLConnection) url.openConnection();
 cks=urlConnection.getHeaderField("Set-Cookie"); 
 SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); 
 Editor editor = pref.edit();
 editor.putString("cookie_name", cks);  // Saving cookie
 editor.commit();

那么,使用CookieManager并将其移动到SharedPreferences有什么意义呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-26 08:07:19

关于Android管理框架的更多细节可以找到在这个医生里,但简而言之,您只需要setDefault()一次。在随后的调用中,您可以使用CookieHandler.getDefault()并向会话提供cookie,如这个答案所示

使用默认实现,您只能从自己的应用程序中访问cookie。

最简单的说法是,Android是将应用程序字节码转换成机器代码的层,每个应用程序都是一个VM,所以VM范围意味着应用程序的作用域。

可以使用SharedPrefs在会话之间持久化cookie,尽管这很少有用(只是我的意见)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49322357

复制
相关文章

相似问题

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