AndroidでCookieの利用

AndroidでCookieの利用

Cookieは、Webサイト側がブラウザを利用している端末に一時的にデータを保存する仕組み

端末へcookieを設定すれば
設定した端末のブラウザからWebサイトへアクセスしたときに
自動的にCookieの値を送信する

これは、ログイン情報の保持に使われる

AndroidのWebViewでもCookieが使えるので
これを使って自動ログインの仕組みの実装
アプリ内ブラウザか、それともそれ以外のブラウザかをサーバーで判定できる

Cookieを使うには
アプリの開始直後に
CookieSyncManagerクラスの
createInstance()を呼び出す

そして、
onResumeハンドラ
onPauseハンドラ

startSync()
stopSync()
を記述する

そして、CookieManagerクラスの
setAcceptCookie()を呼び出せば
Cookieの利用ができる

まず、メンバ変数の宣言

1
private WebView mWebView;

次に、onCreate()の中へCookieを使うための設定

1
2
3
4
5
6
7
8
9
10
11
CookieSyncManager.createInstance(getApplicationContext());
 
CookieManager cm = CookieManager.getInstance();
 
//Cookie利用開始
cm.setAcceptCookie(true);
 
//期限切れのCookie削除
cm.removeExpiredCookie();
 
setCookie();

途中に書いた resumeExpiredCookie()は
期限切れのCookieを削除するメソッド

次に、onResume()へ
startSync()を追加

1
2
3
4
5
@Override
protected void onResume(){
super.onResume();
CookieSyncManager.getInstance().startSync();
}

onPause()には、stopSync()を追加

1
2
3
4
5
@Override
protected void onPause(){
super.onPause();
CookieSyncManager.getInstance().stopSync();
}

次に、Cookieの設定
独自のCookieを設定するには
CookieManagerクラスのsetCookie()を使う

setCookie()の第1引数にはURL
第2引数には、Cookieとして設定する文字列を指定する

まずは、setCookie()の実装

1
2
3
4
5
6
7
private void setCookie(){
 
CookieManager cm = CookieManager.getInstance();
BasicClientCookie cookie = getSampleCookie();
cm.setCookie(cookie.getDomain(), toHeaderCookie(cookie));
CookieSyncManager.getInstance().Sync();
}

サンプルのCookieのURLを作成

1
2
3
4
5
6
7
private BasicClientCookie getSampleCookie(){
 
BasicClientCookie cookie = new BasicClientCookie("CookieSampleKey", "CookieSampleValue");
cookie.setDomain("サーバーのドメイン");
cookie.setPath("/");
return cookie;
}

そして、Cookieの値の作成

1
2
3
4
5
6
7
8
9
10
11
private String toHeaderCookie(BasicClientCookiec){
 
StringBuilder sb = new StringBuilder();
sb.append(c.getName()).append("=").append(c.getValue()).append(";");
 
sb.append("domain").append("=").append(c.getDomain()).append(";");
 
sb.append("path").append("=").append(c.getPath()).append(";");
 
return sb.toString();
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です