2012-08-08 3 views
1

ZF1의 해시 된 요소가 내 사이트의 다양한 형태로 저장되고 정상적으로 작동하는 시간의 99 %가 사용되지만 때때로 실패합니다. 이것은 일반적으로 리디렉션 이후에 발생하지만 리디렉션 홉 내에서는 발생하지 않는 것 같습니다. 양식은 리디렉션 이후에 별도의 동작으로 만들어 지므로 리디렉션이 왜 영향을 미치는지 이해할 수 없습니다. 실패한 양식은 정확하게 토큰을 생성하며 POST 및 유효성 검사 후에 일치하지 않습니다.Zend_Form_Element_Hash 임의의 실패

아이디어가 있으십니까? 아래

해시 요소 :

$token = $this->createElement(
    'hash', 
    'token', 
    array('timeout' => 1440) 
); 

$token->setSalt($config->csrf->salt) 
     ->addErrorMessage('The session for this form has timed out.'); 

$this->addElement($token); 
+0

세그멘테이션 오류가 발생합니까? 아파치 로그에는 무엇이 표시됩니까? –

+0

절대적으로 아무것도. 그것은 제가 확인한 첫번째 것 중 하나였습니다. 나는 여러 서버에서이 문제를 재현 할 수 있기 때문에 segfault가 아닌지 의심 스럽다. –

+0

정확히 "일치하지 않음"이란 정확히 무엇을 의미합니까? –

답변

1

이 문제가 이름 토큰 예정이라고 밝혀졌습니다. 모든 양식에 추가 된 '토큰'이라는 표준 해시 요소가 있습니다. 토큰 이름 앞에 '토큰'대신 토큰 이름이 붙도록 코드를 변경했습니다. 이제는 'loginformtoken'등이됩니다.

이것이 내 코드의 문제로 인한 것인지 확실하지 않습니다. 리디렉션 또는 ZF가 내부의 '토큰'세션을 사용하는지 (충돌 할 수있는 단어 토큰이 ZF 소스 코드에서 상당히 많이 사용 된 것처럼 보임)

그럼에도 불구하고 고유 한 해시 ID를 사용하는 것이 앞으로의 방법이며 앞으로이 표준을 따를 것입니다.

편집 :

이 완전히 설명서를 읽고하지 않는 내 잘못이었다

해시 요소의 이름은 고유해야합니다. 엘리먼트에 소금 옵션을 사용하는 것이 좋습니다. 이름이 같고 염분이 다른 두 개의 해시가 충돌하지 않을 것입니다.

나는 기본 염분과 동일한 해시 이름을 사용하므로 문제가 발생하지 않았습니다.