DEVELOPERS BLOGデベロッパーズブログ

  1. HOME > 
  2. 加藤 正人のデベロッパーズブログ > 
  3. CakePHP 2.x の Cookie と js.cookie.js

加藤 正人のデベロッパーズブログ

加藤 正人

氏名
加藤 正人
役職
多分SE
血液型
秘密
出没
美味しいもののあるところ
特色
タヒチ大好き。ちょいメタボ。

加藤 正人

2017/09/06

CakePHP 2.x の Cookie と js.cookie.js

 

CakePHP 2.x で設定したクッキーを JavaScript (js.cookie.js) で処理しようとして問題にぶち当たった。

CakePHP 2.x では Cookie 名 (既定値は 'CakeCookie') に対しキーを配列のように付与して、CakeCookie[key] という形式でアクセスする。一方 js.cookie.js では [ および ] は%表記として扱う。

このため、Cookies.get('CakeCookie[key]') で CakePHP で設定したクッキーは読み取れるのだが、書き込み時に Cookies.set('CakeCookie[key]', 'abc') のようにすると CakeCookie%5Bkey%5D という名称でクッキーが書き込まれてしまい、CakeCookie[key] とは別のものとなってしまう。

Cookie 仕様としては [ や ] はエンコードするのが正しいようなので、これらを直接指定するのは CakePHP 2.x の不具合のようだ。

対応は CakePHP のコード修正よりも js.cookie.js の方がソース量が小さく、他への影響が少ないので js.cookie.js で対応することにする。

具体的には、js.cookie.js の「書き込みロジック」部分 (先頭から78行目あたり) で

	key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);

としているところを

	key = key.replace(/%(23|24|26|2B|5B|5D|5E|60|7C)/g, decodeURIComponent);

として、5B ([) および 5D (]) を追加してこれらを URI エンコードしないようにして対応する。

関連タグ: CakePHP2  JavaScript  js.cookie.js 

関連エントリー

YOLP (Yahoo! Open Local Platform) のサービス縮小

CakePHP のレンダリング結果を保存したい

iframe の中身の動的切り替え

時刻入力用 jQuery Plugin TimePicki の不具合調整

CakePHP プラグインで HTTPS 判定

作業用モデルビヘイビア

CakePHP のバリデーション時に状況に応じてバリデーションルールを変更する

JavaScript でのクロージャからの外部変数参照

CsvLoader ビヘイビアを使って CSV を一発でロードする Cake Shell

CakePHP の Security コンポーネント、ベーシック認証、CGI

形態素解析システム MeCab (めかぶ) を CakePHP から利用する

Google APIs Client Library を CakePHP から利用する

分数電卓を作ってみる・その2

分数電卓を作ってみる・その1

CsvLoaderBhavior - CSV データを CakePHP で扱うための一手法・その2

 CsvLoaderBhavior - CSV データを CakePHP で扱うための一手法

CakePHP でストアドファンクション

テキストフィールドを CSV として処理する CakePHP ビヘイビア・補足

テキストフィールドを CSV として処理する CakePHP ビヘイビア・その2

テキストフィールドを CSV として処理する CakePHP ビヘイビア・その1

Google Maps で郵便番号⇒住所変換・その2

Google Maps で郵便番号⇒住所変換

テキストを自動整形する簡易 CakePHP ヘルパー

Google Chart へのアクセスをヘルパーで実装してみる【その2】

Google Chart へのアクセスをヘルパーで実装してみる【その1】

Google reCAPTCHA を使いやすくする

駅データ.jp のデータを CakePHP から使う

CakePHP の小ネタ

UploadPack を Exif Orientation 対応にする

作業用テーブル処理を再利用可能なツール化してみる・その1

クリックイベントが2回実行される?!

CakePHP のフォームで required・その2

CakePHP の Paginator の sort() で昇順ソート時に NULL 値を最後にしたい

CakePHP のフォームで required

UploadPack のヘルパーメソッド名称が変わっていた

CakePHP 2.x の PaginatorHelper::sort の不思議

Google Maps Javascript API V2 提供終了

Google Bot と JavaScript

IE と IFRAME のワナ

CakePHP で四苦八苦 - あるフィールドにだけ値が書き込まれない

UploadPack で四苦Hack その後

IE のワナ (script タグの type 属性値)

CakePHP の小ネタ

「JavaScript でバリデーション」を拡張したい

CakePHP v2 のエラー処理

IE10 と CKEditor

2013/03/23
IE10 と CKEditor

JavaScript でバリデーション

JavaScript で入力フィールドの文字カウンタを実装してみる

UploadPack で四苦Hack・その2

Paginator で見かけの URL を使用する方法

「Notes プラグインが見つかりません」

SyntaxHighlighter ではまった話

CakePHP v2 で HTTP エラー画面をカスタマイズする

UploadPack で四苦Hack

PHP 5.4 と CakePHP 2.x