2011-09-09 3 views
-1

일부 필드 검사 (PHP + HTML로 작성)와 함께 설문지를 받았습니다. 그래서 나는 https를 통해 데이터를 보낸다. 사용자가 클릭 모든 데이터는이 데이터가 확인되는 헬퍼 클래스에 전달 된 후 $ _SESSION [ '의 PARAMS']로 이동하고 버튼을 제출 한 후PHP 세션 동작

그것은이

<form id="frm_order" method="post" action="https://site/service_for_businesses" autocomplete="off"> 
<input name="username" id="username" size="40" maxlength="500" type="text" value=""> 
<button name="Submit" id="Submit" value="Отправить" type="submit" onclick="return final_check();"></button> 
</form> 

처럼 작동합니다. 모든 것이 정상이면 사용자는 "SUCCESS PAGE"로 리디렉션됩니다 (이 부분은 잘 작동합니다). 그러나 폼 필드에서 USER의 데이터에 실수가 있으면 $ _SESSION [..]이 VIEW-controller로 전달되고 페이지 실수가있는 양식 필드 근처에 경고가 새로 고쳐집니다.

1) 내가 일부 데이터를 쓴 내가 사용자 이름
2)을 누르면 "^ XS는 미 %가"
3 제출)을가 적었 예를 들어, : 문제는이 같은 비정상적인 동작이 있다는 것입니다 >
를 재 - 데이터 확인에 오류가 원인 사용자는 내가 아무 것도하지 않았다) 내 잘못된 사용자 이름이있는 페이지와
(5) 아래의 경고를 보았지만 단지 제출을 누르면
4) 리디렉션이 때문에 특수 기호를 사용할 수 없습니다 6) 경고가없는 빈 필드가 있습니다.
7) SUBMIT -> redirect를 누름
8) 나는 경고와 함께 4 단계 사용자 이름과 같은 것을 얻었다.

나는 이유를 알 수 없다.

내 웹 사이트는 분산 장치가있는 2 대의 웹 서버 (DdoS를 피하기 위해)에 배포됩니다. 두 서버에서 동일한 ID를 사용하는 세션이 두 개있는 것 같습니다.

+0

마침내 문제가 해결되었습니다. 프록시로 작동하는 nginx가있는 2 개의 추가 서버가있는 것으로 나타났습니다. 그래서 나는 설정 파일을 편집하고 문제를 해결했다. –

답변

1

은, PHP는 세션 ID를 생성하고 존재하지 않는 세션 쿠키를 PHP로 보낼 경우, PHP가 생성됩니다,

또한 php.ini의 때 session.save_path에 의해 정의 된 디렉토리에 저장합니다 해당 세션.

따라서 서버 1에서 세션을 만드는 요청을하면 해당 세션에 대한 쿠키가 만들어집니다. 그런 다음 서버 2로 전환하면 세션 쿠키가 인식되고 세션이 이미 존재하면 세션 쿠키가 사용됩니다 (귀하의 경우). 이 경우 각각에 고유 한 데이터가있는 2 개의 서버에 대해 동일한 세션 ID를 갖게됩니다.

이 문제에 대한 해결책은 세션을 2 개의 서버 (예 : 데이터베이스)에 공통적 인 장소에 저장하는 것입니다. 참고 : http://fr.php.net/manual/en/function.session-set-save-handler.php

1

아파치의 세션은 일반적으로 로컬 디스크에 저장됩니다. (위치는 PHP 설정을 참조하십시오.)

PHP 세션 저장 경로를 공유 리소스 (예 : NFS를 통한 네트워크 디스크)로 설정하면; 실제로 세션 정보를 공유 할 수 있으므로 두 서버 모두에서 동일한 세션을 가질 수 있습니다.

적어도 두 PHP + Apache 인스턴스가 실제로 동일한 세션 저장소를 갖고 있지 않으면; 동일한 (또는 다른) SID에 대해 서로 다른 세션을 갖게됩니다. 기본적으로

1

기본적으로 PHP는 세션 파일을/tmp 디렉토리에 저장합니다. 2 웹 서버 디렉토리에서 웹 사이트를 실행중인 경우 저장 위치는 양쪽 모두에서 액세스 할 수 있어야합니다. 그렇지 않으면 각 웹 서버가 자신의 세션 파일을 저장합니다.

php.ini에서 session.save_path를 설정하여 디렉토리를 변경할 수 있습니다. 세부 정보는 여기를 참조하십시오 : http://www.php.net/manual/en/session.configuration.php

데이터베이스에 세션을 저장할 수도 있습니다.