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(); } |