2013-08-17 3 views
0

방금 ​​1.1에서 업그레이드 한 CakePHP 1.2 빌드가 있습니다. 아쉽게도 세션이 제대로 작동하지 않습니다.CakePHP 1.2에서 세션 리디렉션이 수행되지 않습니다.

나는 stackoverflow에서 다른 스레드에 시간을 보냈다. 해결책을 제시했으나 지금까지 아무 것도 효과가 없었다.

사용자가 accounts/login에서 로그인하면 나는 다음과 같이 accounts_controller.php에서 세션을 설정합니다.

$this->Session->write('Account', $someone['Account']); 

print_r($this->Session->read()); 

$this->redirect("/accounts/profile"); 
exit; 

올바른 세션 정보가 모두 표시되므로 세션을 저장해야합니다. /profile로 리다이렉트되면 모든 것이 사라집니다.

function profile() { 
    print_r($this->Session->Read()); 

이의 출력은 : 나는 핵심 낮은에 케이크 보안 수준을 설정 한

Array ([Config] => Array ([userAgent] => [time] => 1376738563 [timeout] => 10)) 

, 그것은 여전히 ​​작동하지 않습니다.

Configure::write('Security.level', 'low'); 

내 문제는 이것과 본질적으로 동일하다 : Cakephp session is destroyed after redirect

그러나 나는 확실히 내 세션 (내가 확인하기 위해 하드 디스크에 세션 파일을 열)에 저장되는 것을 알고있다. 그리고 그 문제에 다른 해결책이 주어지지 않았습니다.

나는이 스레드가 매우 도움이 찾았지만, 거기에 주어진 솔루션은 나를 중 근무하지 않은 : 나는 php.ini의 설정에 매우 숙련 된 아니에요 cakephp lost session variable when redirect

. 나는 아주 간단한 것을 놓칠 수도 있지만, 나는 머리카락을 꺼내려고합니다. 제가 누락 된 부분에 대한 단서를 제게 줄 수 있습니까?

아무도 도움이된다면 내 php.ini 파일과 core.php 케이크 파일을 게시하게되어 기쁩니다.

Configure::write('Session.save', 'cake'); //I have tried 'php' also 
Configure::write('Session.cookie', 'CAKEPHP'); 
Configure::write('Session.timeout', '120'); 
Configure::write('Session.start', true); 
Configure::write('Session.checkAgent', false); 
Configure::write('Security.level', 'low'); 

나는이 스레드를 읽은 후 아래 다음을 추가 : 여기

는 관련 핵심 설정입니다 cakephp lost session variable when redirect 그것은 이전 또는 이후에 작동하지 않았다. :)

Configure::write('Security.cookie', 'cakephpfdebackend'); 
Configure::write('Session.cookieTimeout', 10000); 
Configure::write('Session.cookie_secure',false); 
Configure::write('Session.referer_check' ,false); 
Configure::write('Session.defaults', 'php'); 

쿠키가 파이어 폭스와 크롬을 모두 시도했습니다. 현재 localhost에서 작업 중이므로 모든 파일에 대한 전체 액세스 권한이 있습니다. 질문이 있으시면 언제든지 문의하십시오. 필사적입니다.

EDIT : 서버의 다른 사이트에서 작동하는 모든 서버가 작동하는 것으로 알고있는 실제 서버까지 사이트를 푸시 할 수있었습니다. 그리고 내 사이트는 그 서버에서 잘 작동합니다. 이 문제는 내 컴퓨터/apache/php의 설정과 관련이 있는지 확인합니다.

+0

리디렉션 전후에'$ this-> Session-> id()'의 값을 확인하면 일치하는지 아닌지에 따라 가능한 원인을 좁힐 수 있습니다 ('Security .Level = low'). 그리고'$ this-> Session-> errors'에 뭐가 있습니까? 또한 쿠키가 실제로 저장되고 전송되는지 여부를 확인 했습니까? 참고로, 1.2 이상에서 1.3 이상으로 업그레이드해야합니다. – ndm

+0

'2013-08-17 10:38:05 디버그 : cab9q09rbpkft8r2ngjll3qdt3' '2013-08-17 10:38:06 디버그 : l0iibb23201b47b2pq6ervj1i4' ' 2013-08-17 10:38:06 디버그 : ' 첫 줄은 리디렉션 전의 ID입니다. 두 번째 줄은 리디렉션 후 ID입니다. (동일하지 않음). 세 번째 줄은 $ this-> Session-> errors의 출력입니다. (공란) 나는 쿠키에 익숙하지 않다. 쿠키가 저장되고 전송되었는지 확인하려면 어떻게해야 할까? 위의 편집을 참조하십시오. 라이브 서버에서도 작동합니다. @ndm – dwlorimer

+0

쿠키를 보려면 파이어 폭스에서'마우스 오른쪽 버튼 클릭> 페이지 정보보기> 보안> 쿠키보기'를 선택하십시오. 'Firefox 버튼 또는 도구> 웹 개발자> 웹 콘솔> 콘솔'은 페이지를 새로 고침하고 요청과 일치하는 적절한 목록 항목을 클릭 한 다음 팝업 메뉴에서 '보낸 편지함/수신 됨'을 참조하십시오. 쿠키. – ndm

답변

2

좋아, 나도 약간 reworded 대답으로 이것을 게시하겠습니다.

이러한 문제는 일반적으로 쿠키와 관련이 있으므로 먼저 쿠키가 실제로 수신되고 설정되어 있는지 서버로 되돌려 보내야하는지 확인해야합니다.쿠키가 설정되고 있는지 확인

는 파이어 폭스에서 그들이 페이지 정보 대화 상자 (페이지 정보> 보안> 개인 정보 보호 & 역사>보기 쿠키에서 찾을 수 있습니다 밖으로의 상자 대부분의 브라우저로 가능하다 Chrome에서는 고급 콘텐츠 설정 (설정> 고급 설정> 개인 정보> 모든 쿠키 및 사이트 데이터)에 숨겨져 있으며 IE에서는 개발자 도구 (캐시> 쿠키보기 정보).

대부분의 브라우저의 개발자 도구를 사용하여 쿠키를 보내고받을 수 있는지 확인하고 Firefox의 경우 네트워크 탭 (Firefox 버튼 또는 도구> 웹 개발자> 웹 콘솔)에서 콘솔을 검사 할 수 있습니다. > 콘솔/네트워크가), 크롬에서이 네트워크 탭에서 찾을 수 있습니다 (F12> 단지 F12> 네트워크> 쿠키) (IE에서 같은 네트워크).

우리가 생각한대로 문제가 발생한 것으로 판단되는 쿠키는 잘못된 도메인 및/또는 경로 값으로 인해 발생하거나, 쿠키가 보안 연결 용으로 만 정의되거나 쿠키가 만료 될 수 있습니다 . PHP 세션 쿠키 설정이 올바르게 구성되었는지 여부를 확인하려면 session_get_cookie_params()을 사용하십시오. lifetime, path, domain, securehttponly 설정 값이 표시됩니다.이 값은 문제가있을 확률이 가장 높습니다.

물론 브라우저 설정, 확장 기능 등이 문제를 일으킬 수 있으므로 브라우저가 지원하는 경우 새로운 기본 브라우저 프로필로 테스트하는 것이 좋습니다.

+0

@ndm awesome !! 그것은 나를 위해 일했습니다. 나는 이것을 localhost에서 알아 내려고 노력했다. 난 그냥 내 localhost에서 그것을 실행하는 'session.cookie_domain'의 가치를 비 웠고 그것은 매력처럼 일했습니다! 설명해 주셔서 감사합니다. –

관련 문제