2012-01-13 13 views
3

を保存しません。それはユーザーがログインページにアクセスしてログインしているときにクッキーを探すように設定されているようです。しかし、Cakeはクッキーを保存していません。少なくとも私が見ることはできません。 cookie->私はこのクッキーを設定した直後、私はの$ this - を配置することができます今すぐCakePHPは私が代わってログイン時に私を覚えて機能を配置しようとしています私のユーザーのコントローラでは、私のクッキー

$cookie=$this->read('Auth.User'); 
if(empty($cookie) and !empty($this->data)){ 
    if($this->Auth->login()) { 
     if(!empty($this->data['User']['remember_me'])){ 
      $cookie = array('id' => $this->Auth->user('id'), 
      ); 
      $expires=strtotime($this->appConfigurations['remember_me'],time()); 
      $this->Cookie->write('Auth.User', $cookie, false, $this->appConfigurations['remember_me']); 
     } 
    } 
} 

> '(Auth.Userをお読みください。私は、次のコードを持っている自動ログイン

これをテストするにはいませんよ');このCookieの値を取得しますが、ブラウザ(Chrome、FireFox)のCookieリストには表示されません。

私はプレーンなPHPのクッキーを使用する場合は、(はsetcookieを経由して)私はクッキーを参照することができますが、もちろんケーキクッキーの読み取りは、これらのクッキーでは動作しません。この問題を解決するにはどうすればよいですか?

私の周りの仕事を見つけたが、それはただのフレームワークをバイパスするので、私はそれを好きではありません。私はケーキがどのようにクッキーを作り出しているかを知り、これらのクッキーのために自分のコードにクッキー作成アルゴリズムを使用し、setcookie()を使って設定を行います。

$cookieValue=$this->Auth->user('id'); 
setcookie('CakeCookie[Auth][User]',$cookieValue,$expires,'/'); 

これで、値を読み取るためにcakes cookieコンポーネントを使用することができます。値が配列の場合は、さらに変更する必要があります。必要な処理を確認するためにcookie.phpコードを読んでください。また、私はcookie.phpとあなたのアプリの設定で見つけられる暗号化も省いた。この問題では、ユーザーIDだけを格納するので、配列の値は必要ありません。私は上記とは違った場所に暗号化を入れました。

私はまだ部品はしかし動作していない理由を知っていただきたいと思います。

+0

質問:何がます$ this-> appConfigurations [ 'remember_meは']のように見えるのでしょうか?あなたが戻ってきたら、デバッグ($ cookie)で何を得ますか? –

+0

$ this-> appConfigurations ['remember_me'] = '+30日';私はデバッグ($クッキー)私は通常の配列を画面に印刷されます。 $ this-> Cookie-> read( 'Auth.User')を実行すると、 $ this-> Cookie-> write()を介してクッキーを設定し、それを画面にデバッグした後、私は関数のスコープ内にある限り、適切な配列形式でクッキーデータを参照します。そのスコープを離れると、クッキーはもう存在しなくなります。 – brucemartin

+0

あなたの最初の行は$ cookie = $ this-> Cookie-> read( 'Auth.User')であるべきではありません。 ?別の名前で試しましたか? Auth.UserがAuthコンポーネントで使用される形式ですので、多分それはあなたの問題に関連している可能性が(私は思うが、それは動作しない場合、私は偏執的になるべきではありません) –

答えて

1

次のログインアクションは私のためによく働く:

function login() { 
    $cookie = $this->Cookie->read('Auth.User'); 
    debug($cookie); // Just a test 
    if ($this->Auth->user('id')) { 
     if(!empty($this->data)) { 
      $cookie = array(
       'username' => $this->data['User']['username'], 
       'password' => $this->data['User']['password'] 
      ); 
      $this->Cookie->write('Auth.User', $cookie, false, '+2 weeks'); 
     } 
     $this->redirect('/'); 
    } 
    elseif (!empty($cookie)) { 
     if ($this->Auth->login($cookie)) { 
      $this->redirect('/'); 
     } 
    } 
} 

それはあなたの側で動作しますか?

関連する問題