Railsでpath付きcookieが削除できなくて困った件
皆さんこんにちは
先日Railsでpath付きのcookieが削除できなくて困りましたが、最終的には以下のようにして対応できました。
cookies[:abc] = {:value =>"", :path => "/home", :expires => Time.at(0) }
しかしよく調べてみたところ、削除時にpathを指定すれば普通に削除できたので、いい加減な対応をして終わらせた事への反省の意味を込めて調べた内容を公開しようと思います。
検証環境
- Ruby 2.2.2
- Rails 4.2.4
Railsでcookieを扱う場合はActionDispatch#cookiesを使います。
cookieを読み書きする
コントローラ内で以下のように記述することでcookieを書き込むことができます。
cookies[:abc] = 'test'
書き込んだcookieは以下のように読み出せます。
value = cookies[:abc]
cookieを削除する
コントローラ内に以下のように記述することでcookieを削除できます。
cookies.delete(:abc)
オプションを指定してcookieをセットする
オプションを指定してcookieをセットする場合は以下の用にハッシュで指定します。
cookies[:abc] = { value: 'test', expires: 1.day.from_now }
上記の例では一日後の有効期限を付けたcookieをセットしています。
指定できるオプションは以下のとおりです。
オプション | 説明 | デフォルト値 |
---|---|---|
:value | クッキーの値 | |
:path | クッキーが有効なパス | |
:domain | クッキーが有効なドメイン | 現在のホスト |
:expires | クッキーの有効期限 | / |
:secure | 暗号化通信でのみクッキーを送信 | false |
:httponly | HTTPクッキーを有効 | false |
署名付きcookieを読み書きする
通常のcookieでは平文でブラウザに保存されますが、署名付きcookieとして保存するとブラウザ側で中身が見られることはありません。
以下のようにすることで署名付きcookieを書き込めます。
cookies.signed[:abc] = 'test'
オプションを指定する場合は通常のcookieと同じでハッシュを渡します。
cookies.signed[:abc] = { value: 'test', expires: 1.day.from_now }
読み込む場合は以下のようにします
value = cookies.signed[:abc]
signedを付けないで署名付きcookieを読み込もうとすると、暗号化された値が取得されます。
パスやドメインを指定したcookieが削除できない場合
パスやドメインを指定したcookieを削除する場合は、削除時には以下のように:path
や:domain
を指定する必要があります。
パスを指定したドメインをセット
cookies.signed[:abc] = { value: 'test', expires: 1.day.from_now, path: '/home' }
パスを指定したドメインを削除
cookies.delete :abc, path: '/home'
永続化cookieをセットする
以下のようにすると、永続化cookie(有効期間が20年に設定されたcookie)を設定できます。
cookies.permanent[:abc] = 'test'
新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境