2012-01-13 5 views
3

내 사용자 컨트롤러에 로그인 할 때 기억 기능을 추가하려고합니다. 그것은 사용자가 로그인 페이지를 방문하고 로그인 할 때 쿠키를 찾는 쿠키를 간단히 설정하는 것처럼 보입니다. 그러나 쿠키는 적어도 내가 볼 수있는 쿠키를 저장하지 않으며, 페이지를 다시 방문 할 때 자동 로그인하고 있지 않다CakePHP가 내 쿠키를 저장하지 않습니다

나는 다음과 같은 코드가이 테스트하려면 :. 나는이 $ this-> cookie-> 읽기 ('Auth.User를 배치 할 수 있습니다이 쿠키를 설정 후 바로 지금

$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']); 
     } 
    } 
} 

을 '); 이 쿠키의 가치를 얻지 만 브라우저 (Chrome, FireFox) 쿠키 목록에는 표시되지 않습니다.

일반 PHP 쿠키를 사용하는 경우 setcookie()를 통해 쿠키를 볼 수 있지만 물론 쿠키 쿠키는 쿠키와 함께 작동하지 않습니다. 이 문제를 해결하려면 어떻게해야합니까?

나는 프레임 워크를 우회하기 때문에 해결 방법을 찾았지만 마음에 들지 않습니다. 나는 케이크가 쿠키를 만드는 방법을 알아 냈다. 그리고이 쿠키들에 대해서 나는 내 코드에서 쿠키 만들기 알고리즘을 사용하고 setcookie()를 사용하여 설정을한다.

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

지금 당신이 값을 읽어 케이크에게 쿠키 구성 요소를 사용할 수 있습니다 : 그냥 원하거나 주변의 일을 사용해야 할 수도 다른 사람을 위해. 값이 배열 인 경우 변경해야 할 것이 많습니다. 수행해야 할 작업을 보려면 cookie.php 코드를 읽으십시오. 또한 나는 cookie.php와 앱 설정에서 찾을 수있는 암호화를 생략했습니다. 이 문제는 사용자 ID 만 저장하기 때문에 배열 값이 필요하지 않습니다. 위와 달리 암호화를 적용했습니다.

여전히 구성 요소가 작동하지 않는 이유를 알고 싶습니다.

+0

질문 : $ this-> appConfigurations [ 'remember_me']는 어떻게 생겼습니까? 돌아올 때 디버그 ($ 쿠키)로 무엇을 얻습니까? –

+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('/'); 
     } 
    } 
} 

은 당신의 측면에서 작동합니까?

관련 문제