LoginSignup
2
1

More than 5 years have passed since last update.

Android の CookieManager と samesite 属性つきのクッキー

Posted at

Android にて WebView で扱われる Cookie を CookieManager で取得できる。

WebView wv = (WebView)findViewById(R.id.webView);
wv.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        CookieManager cookieManager = CookieManager.getInstance();
        String[] cookies = cookieManager.getCookie(url).split(";");
        for(String cookie : cookies) {
            Log.d(TAG, cookie);
        }
    }
});

古くからある属性(Path etc)は どの OS バージョンでも同じように挙動するようだが、
最近導入されている属性がついている場合、古い OS バージョンは取れるが、新しい OS バージョンだと取れないということがあった。

例えば、ASP.NET Core2.0 で Identity を特に何も設定しないで使うと クッキーに samesite 属性が付与される。

Set-Cookie: .AspNetCore.Identity.Application=CfD..(中略)....; 
  expires=Fri, 15 Dec 2017 11:13:50 GMT;
  path=/;
  samesite=lax;
  httponly

samesite cookie について

このクッキーは Android 7 以前では取得できたが、Android 7以降では取得できなくなっていた。
(Nexus5 + Android 6 / Nexus6 + Android7 / Nexus5X + Android8 で確認)

OS バージョンによって CookieManager.getCookie() で取れたり取れなかったりする場合、属性も確認要点の一つですね、と。

なお、ASP.NET Core 2.0 で samesite 属性は以下のように変更できる。

public class Startup
{
    :
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddIdentity<AuthTestUser, DummyRole>().AddDefaultTokenProviders();
        services.ConfigureApplicationCookie(options =>
        {
            // 外す場合
            options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
        });
    }
    :
}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1