Mat*_*hai 8 cookies android httpurlconnection android-cookiemanager android-sharedpreferences
我正在学习cookies在Android中存储并遇到了几种实现它的方法.其中一个是使用CookieManager and CookieStore.
当我浏览Android文档时,我发现了以下声明:
为了在客户端和服务器之间建立和维护可能长期存在的会话,HttpURLConnection包括一个可扩展的cookie管理器.使用CookieHandler和CookieManager启用VM范围的cookie管理:
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
Run Code Online (Sandbox Code Playgroud)
我不明白的意思VM-wide cookie management.我知道VM意味着Virtual Machine.
我的解释:
我解释它的一种方法是,创建CookieManager并传递它以setDefault()使其在整个应用程序中可用.因此,我尝试了以下测试.
URL url = new URL("http://something.com");
URI uri=new URI("http://something.com");
urlConnection = (HttpURLConnection) url.openConnection();
cks=urlConnection.getHeaderField("Set-Cookie");
//cks is a String
cookieManager=new CookieManager();
CookieHandler.setDefault(cookieManager);
HttpCookie hc=new HttpCookie("Cookie1",cks);
cookieManager.getCookieStore().add(uri,hc);
cks1=cookieManager.getCookieStore().getCookies().get(0).getValue();
//cks1 is another String
Run Code Online (Sandbox Code Playgroud)
我设置cks and cks1为TextViews并按content/value预期打印cookie .根据我的解释,我尝试cookieManager.getCookieStore().getCookies().get(0).getValue();了另一个活动,但它没有识别出对象,这意味着它超出了范围而且无法访问.此外,创建了一个新的,CookieManager并尝试获取cookie,但它返回null.因此,我假设可以跨活动访问VM范围的这种解释是不正确的.
第二个解释是Cookies将在CookieManager设置时自动存储.我从SO的另一个问题的解决方案中得到了它:使用Java URLConnection进行Cookie管理
解决方案中的一个陈述如下:
当HttpURLConnection从服务器接收cookie时,CookieManager将接收cookie并存储它.对同一服务器的未来请求将自动发送先前设置的cookie.
我删除cookieManager.getCookieStore().add(uri,hc);了测试它,发现cookie不会自动存储.所以,这种解释也失败了.
存储cookie供以后使用的大多数解决方案建议使用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();
Run Code Online (Sandbox Code Playgroud)
那么使用CookieManager它然后将它移动到SharedPreferences什么地步呢?
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |