2013-04-29 3 views
3

여러 라우터에서 구성 명령의 실행을 실행하는 응용 프로그램을 작성하고 있습니다. 여기 는이 설계 방법은 다음과 같습니다여러 브라우저 탭과 PHP가있는 "뒤로"버튼

Page 1   Page 2   Page 3            
+--------+  +--------+  +--------+ 
| data | PRG | data | PRG | steps | 
| enter |------->| review |------->| exec |---+ 
| page |  | page |  | page | | 
+--------+  +--------+  +--------+ | Ajax 
             ^  | 
             |  | 
             +--------+ 
  1. 사용자는 첫 번째 페이지에있는 양식을 채 웁니다.
  2. 시스템은 더 많은 데이터를 가져 와서 두 번째 페이지의 다른 형식으로 검토를 위해 표시합니다.
  3. 구성 단계는 Ajax 요청을 사용하여 세 번째 페이지에서 실행됩니다.

나는 uniqid()를 통해 ID를 생성하고 양식의 숨겨진 요소에 넣어 여러 브라우저 탭/창을 처리합니다. 각 탭/창에 대한 데이터는 $_SESSION[$ID]에 저장됩니다. Post-Redirect-Get은 귀찮은 양식의 재 제출을 없애는 데 사용됩니다.

사용자가 브라우저에서 '뒤로'버튼을 누르면 새 ID가 생성됩니다. 이로 인해 $_SESSION과 웹 양식이 동기화되지 않습니다. 나는 끈적한 양식을 사용하여 응용 프로그램이 마법사처럼 작동하도록 할 계획 이었지만 탭/창 존재 기간 동안 ID가 동일하게 유지되어야합니다.

"뒤로"버튼을 클릭하면 새 탭이 열리는 것을 어떻게 구별 할 수 있습니까?

감사합니다! PN

+2

. 페이지를 떠날 때 "언로드"이벤트를 감지하는 방법이 있지만 표준화되거나 신뢰할 수 없습니다. –

+1

OK, 그게 :) 신뢰성이 중요하기 때문에. 아마 그것을 생각하고 그 요구 사항을 제거하는 더 나은 디자인을 생각 해낼 필요가 있습니다. 고맙습니다! – pn8830

+0

당신은 엄청나게 큰 필드 나 매우 큰 데이터를 가지고 있지 않다면 숨겨진 양식 필드는 서버 측 동기화 없이도 특정 탭/창에 데이터를 묶을 것입니다. –

답변

0

페이지 순서에 따라 페이지 번호를 지정하고 각 페이지 하단에 세션 var 값을 선언하면 사용자의 위치 (예 : 뒤로 가기)를 감지 할 수 있습니다.

page 1 = data enter page : $_SESSION['last_page'] = 1; 

page 2 = data review page : $_SESSION['last_page'] = 2; 

page 3 = steps exec page : $_SESSION['last_page'] = 3; 

그리고 그들은 같은 조건으로 다시 버튼을 눌렀을에서 온 경우 비교 : 당신이 할 수없는, 아니 안정적 어쨌든

#on data enter page 1 - checking if user came from data review page 2  
if($_SESSION['last_page'] > 1){ 
     #USER HIT BACK BUTTON - don't re-declare session id 
    } 
+0

입력 해 주셔서 감사합니다. 하나의 탭/창이 열리면 잘 작동합니다. 내가 설명 할게, 그것을 과도하게 복잡하게하지 않고 질문에 넣는 방법을 알 수 없었다. $ _SESSION은 모든 브라우저 탭에 공통적으로 사용되므로 한 탭에서 탐색하면 다른 탭의 세션 데이터를 처리 할 메커니즘이없는 경우이를 덮어 씁니다. 나는 "트랜잭션"(페이지에서 페이지로 이동) 당 고유 ID를 할당하는 가장 간단한 솔루션을 생각해 냈습니다. 새로운 탭을 열었을 때처럼 뒤로 버튼을 누르면 새로운 ID가 생성됩니다. – pn8830