我正在学习在安卓系统中存储cookies,并找到了实现它的几种方法。其中之一就是使用CookieManager and CookieStore。
在浏览Android文档时,我看到了以下声明:
为了在客户机和服务器之间建立和维护一个潜在的长时间会话,HttpURLConnection包括一个可扩展的cookie管理器。使用CookieHandler和CookieManager启用VM范围的cookie管理:
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);我不明白VM-wide cookie management的意思。我知道VM的意思是Virtual Machine。
My的解释:
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范围的解释是不正确的。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呢?
例如:
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有什么意义呢?
https://stackoverflow.com/questions/49322357
复制相似问题