Android CookieManager 和重定向
Android CookieManager and Redirects
我正在使用 android.webkit.CookieManager 中的 setCookie 方法设置两个 cookie -
https://developer.android.com/reference/android/webkit/CookieManager.html 两个不同的 URL 具有相同的值。
但是,我知道当我在 webview 上加载第一个 URL 时,它会向我发送一个指向第二个 URL 的 HTTP 重定向,我也为其设置了 cookie。
我的问题是:cookie 管理器会发送第二个 cookie URL吗?
是的。
只要 cookie 满足要求(域、路径、安全、httponly、未过期等),WebView 就会将 cookie 与每个请求一起发送。这包括当 WebView 发出重定向请求 URL 时,如果有满足重定向 URL 要求的 cookie,则 WebView 将随请求一起发送这些 cookie。因此,如果您为重定向 URL 显式设置 cookie,那么当 WebView 遵循重定向并发出重定向请求时,它应该被包含 URL.
示例 1
使用 android.webkit.CookieManager
设置 all WebView
实例将使用的 cookie。我通常在 Activity 的 onCreate()
方法或 Fragment 的 onViewCreated()
方法中执行此操作,但您几乎可以在任何生命周期方法中配置 CookieManager
,但它 必须 在 WebView
加载 url 之前完成。这是在 onViewCreated()
中配置 CookieManager
的示例。
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//Replace R.id.webview with whatever ID you assigned to the WebView in your layout
WebView webView = view.findViewById(R.id.webview);
CookieManager cookieManager = CookieManager.getInstance();
//originalUrl is the URL you expect to generate a redirect
cookieManager.setCookie(originalUrl, "cookieKey=cookieValue");
//redirectUrl is the URL you expect to be redirected to
cookieManager.setCookie(redirectUrl, "cookieKey=cookieValue");
//Now have webView load the originalUrl. The WebView will automatically follow the redirect to redirectUrl and the CookieManager will provide all cookies that qualify for redirectUrl.
webView.loadUrl(originalUrl);
}
示例 2
如果您知道重定向 URL 将在同一个顶级域中,例如。 mydomain.com
将重定向到 redirect.mydomain.com
,或者 www.mydomain.com
将重定向到 subdomain.mydomain.com
,或者 subdomain.mydomain.com
将重定向到 mydomain.com
,然后 您可以为整个 mydomain.com 域 设置一个 cookie。
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//Replace R.id.webview with whatever ID you assigned to the WebView in your layout
WebView webView = view.findViewById(R.id.webview);
CookieManager cookieManager = CookieManager.getInstance();
//Set the cookie for the entire domain - notice the use of a . ("dot") at the front of the domain
cookieManager.setCookie(".mydomain.com", "cookieKey=cookieValue");
//Now have webView load the original URL. The WebView will automatically follow the redirect to redirectUrl and the CookieManager will provide all cookies for the domain.
webView.loadUrl(originalUrl);
}
我正在使用 android.webkit.CookieManager 中的 setCookie 方法设置两个 cookie - https://developer.android.com/reference/android/webkit/CookieManager.html 两个不同的 URL 具有相同的值。
但是,我知道当我在 webview 上加载第一个 URL 时,它会向我发送一个指向第二个 URL 的 HTTP 重定向,我也为其设置了 cookie。
我的问题是:cookie 管理器会发送第二个 cookie URL吗?
是的。
只要 cookie 满足要求(域、路径、安全、httponly、未过期等),WebView 就会将 cookie 与每个请求一起发送。这包括当 WebView 发出重定向请求 URL 时,如果有满足重定向 URL 要求的 cookie,则 WebView 将随请求一起发送这些 cookie。因此,如果您为重定向 URL 显式设置 cookie,那么当 WebView 遵循重定向并发出重定向请求时,它应该被包含 URL.
示例 1
使用 android.webkit.CookieManager
设置 all WebView
实例将使用的 cookie。我通常在 Activity 的 onCreate()
方法或 Fragment 的 onViewCreated()
方法中执行此操作,但您几乎可以在任何生命周期方法中配置 CookieManager
,但它 必须 在 WebView
加载 url 之前完成。这是在 onViewCreated()
中配置 CookieManager
的示例。
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//Replace R.id.webview with whatever ID you assigned to the WebView in your layout
WebView webView = view.findViewById(R.id.webview);
CookieManager cookieManager = CookieManager.getInstance();
//originalUrl is the URL you expect to generate a redirect
cookieManager.setCookie(originalUrl, "cookieKey=cookieValue");
//redirectUrl is the URL you expect to be redirected to
cookieManager.setCookie(redirectUrl, "cookieKey=cookieValue");
//Now have webView load the originalUrl. The WebView will automatically follow the redirect to redirectUrl and the CookieManager will provide all cookies that qualify for redirectUrl.
webView.loadUrl(originalUrl);
}
示例 2
如果您知道重定向 URL 将在同一个顶级域中,例如。 mydomain.com
将重定向到 redirect.mydomain.com
,或者 www.mydomain.com
将重定向到 subdomain.mydomain.com
,或者 subdomain.mydomain.com
将重定向到 mydomain.com
,然后 您可以为整个 mydomain.com 域 设置一个 cookie。
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//Replace R.id.webview with whatever ID you assigned to the WebView in your layout
WebView webView = view.findViewById(R.id.webview);
CookieManager cookieManager = CookieManager.getInstance();
//Set the cookie for the entire domain - notice the use of a . ("dot") at the front of the domain
cookieManager.setCookie(".mydomain.com", "cookieKey=cookieValue");
//Now have webView load the original URL. The WebView will automatically follow the redirect to redirectUrl and the CookieManager will provide all cookies for the domain.
webView.loadUrl(originalUrl);
}