我有一个返回多个cookie的服务器请求,如下所示:
这就是我将这些cookie存储到cookieManager的方式:
HttpURLConnection connection = ... ;
static java.net.CookieManager msCookieManager = new java.net.CookieManager();
msCookieManager.put(COOKIES_URI, connection.getHeaderFields());
Run Code Online (Sandbox Code Playgroud)
这就是我将这些cookie添加到下一个连接的方式:
connection.setRequestProperty("Cookie",
msCookieManager.getCookieStore().get(COOKIES_URI).toString());
Run Code Online (Sandbox Code Playgroud)
它是从cookieManager获取cookie的正确方法吗?我很确定有一个更好的...
我需要获取存储在webview中的所有cookie.目前默认的webview.
https://developer.android.com/reference/android/webkit/CookieManager.html
目前它只支持:
我需要能够在不知道确切域名的情况下获取所有cookie.
任何建议表示感谢,D
我正在创建一个基于WebView的Android应用程序,使用户可以登录移动运营商.当我运行应用程序时,WebView会打开网站,但我收到一条消息,表明WebView不允许使用cookie.我尝试过各种我在这里找到的代码,但都没有.谁能帮我?这是我正在使用的代码:
//in oncreate
final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this);
final CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
String[] cookies = getCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
for (String cookie : cookies) {
cookieManager.setCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register", cookie);
}
cookieSyncManager.sync();
webView.loadUrl("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
Run Code Online (Sandbox Code Playgroud)
和getCookies方法:
public String[] getCookie(String siteName) {
CookieManager cookieManager = CookieManager.getInstance();
String cookies = cookieManager.getCookie(siteName);
String[] cookiesArray = cookies.split(";");
return cookiesArray;
}
Run Code Online (Sandbox Code Playgroud) cookies android android-webview android-websettings android-cookiemanager
我正在学习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管理
解决方案中的一个陈述如下: …
cookies android httpurlconnection android-cookiemanager android-sharedpreferences
目前Android可以实现这个功能吗?我只能找到有关旧方法(CookieSynchManager)的已弃用问题,这实际上似乎不适用于此。
有可能实现吗?我在 Android 开发人员指南上也找不到任何内容。
cookies android webview android-webview android-cookiemanager
为了通过我在我HttpURLconnection
使用的cookie管理会话
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
Run Code Online (Sandbox Code Playgroud)
现在,当我退出应用程序时,cookie将被删除.如何将它们保存到SharedPreferences
并重新加载到CookieManager
?
我尝试在 Android WebView 中使用 CookieManager 获取 cookie 信息。然而,它所做的只是提供一个键值对 cookie,没有额外的信息。
我也尝试过这篇文章并用于connection.getHeaderFields.get("Set-Cookie");
获取从服务器收到的所有 cookie。但据我所知,我没有看到我应该从服务器接收的所有 cookie。这也可以通过 CookieManger 中的某些 cookie 收到新值但未显示在Set-Cookie
字段中来发现。
理想情况下,我想拦截每个响应并使用来自服务器的所有信息(如名称、值、最大年龄、安全等)检查他们的 cookie。有什么建议如何使用 Android WebView (WebViewClient) 执行此操作?
嗨,我目前正在开发一个使用Retrofit进行网络呼叫的Android应用程序.这是对我的要求的基本概述.
1.Get Facebook access token and send it to the server. 2.The server sets a Session cookie in the response. 3.In all the upcoming requests send the session cookies back.
当前问题:
除非用户正在使用该应用程序(跨越不同的活动),否则我能够保持会话cookie活着.但是一旦用户退出应用程序,Cookie就会被删除.我已经在一个类似于Application类的类中声明了这些cookie .即使在应用程序退出后,我仍需要保持这些会话cookie活着.这样当用户再次打开我的应用程序时,我可以使用它们进行进一步处理.
以下是我在应用程序中实现的一些代码片段.
AppController.java(Application类的子类)
public class AppController extends Application { private static AppController mInstance; private static OkHttpClient client; private static CookieManager cookieManager; private static Context context; private static AviyalApiService api; // custom interface having all the GET and POST private static OkClient okClient; private static RestAdapter …
我正在开发一个与服务器通信并有登录屏幕的应用程序。我正在使用 httpconnection 与服务器通信(服务器发回 Json 响应)。我的登录屏幕发送电子邮件和密码,由服务器验证 - 服务器发送 cookie 并期望每个进一步请求的 cookie 都知道用户已登录。
我正在使用 Cookiemanager 和 cookie 处理程序来启用会话,以便用户只需登录一次。
在我的主活动中使用以下 2 个命令(在 Create 方法上)
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
Run Code Online (Sandbox Code Playgroud)
工作模型是我的主要活动向服务器发送一个读取命令,该命令检查用户是否已经登录(期望内部带有 id 的 cookie),并以 json 形式发送状态。如果状态为 0,则移至登录活动,否则移至主屏幕。
在登录活动中,我发送带有用户名和密码的登录命令,服务器发送一个 cookie(发送一个唯一的 id,它会交叉检查任何进一步的请求以验证用户)并返回 json 响应。
登录后,我转到主屏幕并读取状态,因为我在主活动中创建了 CookieManager,所以它会自动随每个 httprequest 发送 cookie。
问题是——当我退出应用程序并在登录后返回时..它再次从主要活动开始并进入登录屏幕而不是主屏幕。我无法弄清楚为什么会这样,以及如何让我的用户登录一次,之后即使他退出应用程序,它也会保留 cookie。
我认为 CookieManager 即使在退出后也会保留 cookie。是否因为我在创建方法中创建 cookie Manager 对象,并且当应用程序退出并重新启动时,它再次创建新对象?或者我的假设是错误的。
让我们为cookie存储做准备:
CookieSyncManager.createInstance(getApplicationContext());
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().setAcceptCookie(true);
Run Code Online (Sandbox Code Playgroud)
然后,我手动放入一些cookie,让我们说PHPSESSID
和RANDOM
CookieManager.getInstance().setCookie("domain.com", "PHPSESSID="+phpSession);
CookieManager.getInstance().setCookie("domain.com", "RANDOM="+random);
Run Code Online (Sandbox Code Playgroud)
我们使用以下命令检查它是否正常工作:
CookieManager.getInstance().getCookie("domain.com");
Run Code Online (Sandbox Code Playgroud)
并得到
PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56; RANDOM=266284790:1466147978:c91d0896bac59e0b
Run Code Online (Sandbox Code Playgroud)
一切看起来都不错,但是当我导航到应用程序中的“ WebView
活动” 之一时,该活动会打开同一域的网站并设置cookie,然后当我像上面那样打印cookie时,它看起来像这样:
PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56;
RANDOM=266284790:1466147978:c91d0896bac59e0b;
PHPSESSID=9ecb5156cf8fc3190fbc69fd13393243;
RANDOM=265078219%3A1463147975%3Ad0448d163e9b2123
Run Code Online (Sandbox Code Playgroud)
重复的条目...之后,我再次手动设置例如RANDOM与setCookie
:
PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56;
RANDOM=111111111:2222222222:33333336bac59e0b;
PHPSESSID=9ecb5156cf8fc3190fbc69fd13393243;
RANDOM=265078219%3A1463147975%3Ad0448d163e9b2123
Run Code Online (Sandbox Code Playgroud)
设置的值WebView
不会被覆盖,只有我的“手动”输入...如何强制WebView
使用我之前设置的cookie或已设置的覆盖?