【Kotlin/Android】WebViewのクッキーの扱い方!CookieManager
この記事からわかること
- Kotlin/Android StudioでWebViewの使い方
- クッキーを操作する方法
- CookieManagerの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Koala
- Kotlin:1.8.20
Cookie(クッキー)とは?
Cookie(クッキー)とはサイトがブラウザに小さなデータを保存できる仕組みのことです。対象のデータは特定の形式のテキストベースで各ウェブブラウザの内部ストレージに保存されるため、ブラウザを閉じて再度開いても対象のデータが残存しています。
Cookieのデータ自体はレスポンスのヘッダー(Set-Cookie)に含まれてブラウザに送信されます。データ自体がそのまま流れるためセキュリティ面は担保されていないので認証情報や機密情報を扱う場合は注意が必要です。
Cookieの形式
Cookieのデータ形式は基本的にはkey=value
形式のデータを;
で区切った形式になります。
name=value; Expires=Wed, 09 Jun 2024 10:18:14 GMT; Path=/; Domain=example.com; Secure; HttpOnly
name=value
key=value
形式で任意のキーと値を記述できます。例:sessionId=abc12
Expires=有効期限
クッキーの有効期限をGMT(Greenwich Mean Time)形式で指定します。
Max-Age=秒数
クッキーの有効期限を秒数で指定します。Max-Age=3600
の場合は1時間になります。
Path=/
クッキーが有効なパスを指定します。Path=/
の場合はサイト全体に適応されます。
Domain=ドメイン
クッキーを利用できるドメインを指定します。デフォルトでは、クッキーは作成されたドメインとそのサブドメインにのみ送信されます。
Secure
Secure
属性はHTTPS接続でのみクッキーを送信するようにします。
HttpOnly
HttpOnly
属性はJavaScriptからクッキーにアクセスできなくなります。
AndroidのWebViewでクッキーを操作する
AndroidのWebViewでクッキーを操作するにはCookieManager
クラスを使用します。使用方法は簡単でsetAcceptCookie
でクッキーを有効にして、setCookie
で保存したいデータを渡します。
保存されているクッキーはgetCookie
で取得することができます。
// クッキーを有効化
val cookieManager = CookieManager.getInstance()
cookieManager.setAcceptCookie(true)
// クッキーを設定
val url = "https://appdev-room.com/"
cookieManager.setCookie(url, "name=ame")
webView.settings.javaScriptEnabled = true
webView.loadUrl(url)
// クッキーを取得
val cookies = cookieManager.getCookie(url)
Log.d("Cookies", "Cookies for $url: $cookies")
クッキーに値や属性セットする
クッキーに値や属性をセットするにはsetCookie
メソッドを使用します。第一引数にセット対象のURLを、第二引数にセットしたいクッキー文字列を渡します。文字列をそのまま指定するので形式が崩れないように注意してください。
val cookieString = "sessionId=abc123; Max-Age=10; Path=/; Secure; HttpOnly"
cookieManager.setCookie(url, cookieString)
クッキーを削除する
クッキーを削除するにはremoveAllCookies
メソッドを使用します。別の方法として有効期限に過去の日付を指定することでクッキーを無効にすることも可能です。
cookieManager.removeAllCookies(null)
----- OR ------
// 過去の日付を設定することでクッキーを無効にする
val cookieString = "sessionId=; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=/"
cookieManager.setCookie(url, cookieString)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。