人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CakePHP2.2 Cookieが削除できない

お世話になっています。

// Cookie書き込み
$this->Cookie->write('id', $id, false, '5 day');
$this->Cookie->write('pass', $pass, false, '5 day');

// Cookie削除
$this->Cookie->delete('id');
$this->Cookie->delete('pass');
$this->Cookie->destroy();

// Cookie削除の次の処理 Cookieが削除されずに残っています。
if (!is_null($this->Cookie->read('id'))) {
$id = $this->Cookie->read('id');
$pass = $this->Cookie->read('pass');
}

Security.levelはmediumです。

画面をリロードすればCookieは削除されるのですが、
Cookie削除→Cookie判定の順番で確認したらCookieは削除されていませんでした。

ご教授宜しくお願いします。

●質問者: oracle11011
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● TransFreeBSD
ベストアンサー

http://api22.cakephp.org/view_source/cookie-component#l-259
readは$this->_valuesが空なら$_COOKIEから読んでいます。

http://api22.cakephp.org/view_source/cookie-component#l-424
destroyは$this->_valuesのメンバをすべてunsetします。
したがって$this->_valuesは空となり、次回のreadで$_COOKIEから読みこまれます。
実際の削除は_deleteを呼んでいて、_deleteはCakeResponseオブジェクトのcookieメソッドを使います。

http://api22.cakephp.org/view_source/cake-response#l-1128
CakeResponseのcookieメソッドは内部に記録はしますが$_COOKIEは変更しません。

対策案としては以下あたりでしょうか。

  1. $_COOKIEとsetcookieの関係のようなものと割り切る
  2. CookieComponentの_valuesの初期値を変更し、空のarrayはcookieなしとするクラスを用いる
  3. CookieComponentのreadで最初にCakeResponseのcookieメソッドをチェックする

CookieComponentを変更する場合は以下が考えられます。

  1. CakePHPのソースを直接変更する
  2. CookieComponentを継承したオブジェクトを使う

oracle11011さんのコメント
コメント有難う御座います。 ローカルフラグを持たせて回避します。 有難う御座いました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ