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は削除されていませんでした。

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/11/14 13:04:39
  • 終了:2012/11/16 14:50:43

ベストアンサー

id:TransFreeBSD No.1

TransFreeBSD回答回数664ベストアンサー獲得回数2652012/11/15 19:14:31

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を継承したオブジェクトを使う
id:oracle11011

コメント有難う御座います。

ローカルフラグを持たせて回避します。

有難う御座いました。

2012/11/16 14:50:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません