2016-07-16 6 views
0

쿠키에 대한 사용자의 응답 (객관식)을 저장하고 있습니다. 서버는 사용자가 20 개의 질문을 시도한 후에 만 ​​쿠키에서 데이터를 추출합니다. 문제는 사용자가 시도한 경우에만 10 개의 질문을하고 사이트를 떠난 경우입니다. 쿠키의 응답을 서버에서 사용할 수 없습니다. 요구 사항으로 인해 모든 페이지로드에서 쿠키 데이터를 추출 할 수 없습니다. 나는 여분의 데이터가 서버와 동기화 될 수 있도록 쿠키가 만료되기 전에 페이지로드를 트리거하려고 생각했습니다. 그러나 could'nt는 어떤 해결책을 발견한다. 페이지로드없이 서버에 쿠키 데이터를 보냅니다.

이 문제에

예를 들어 어떤 포인터를 감사 : 500 페이지, 모두 객관식 질문입니다이 있습니다. 사용자가 첫 번째 질문을 시도하면 답변이 쿠키에 기록됩니다. 두 번째 페이지/두 번째 질문/다음 페이지로드. 서버는 쿠키를 찾습니다 ... 단 하나의 레코드 만 있기 때문에 아무것도하지 않습니다. 다음 질문 ... 다시 사용자 응답이 쿠키에 저장됩니다. 서버는 20 개의 레코드를 찾을 때까지 아무것도하지 않습니다 (20 개의 레코드 표시기는 플래그가 플러시로 주어지며 서버가 20 개의 레코드/질문 모두의 쿠키 데이터를 추출하고 데이터베이스를 업데이트하면 쿠키를 지우고 20 개의 레코드를 다시 기다립니다). 서버가 마지막으로 페이지로드 때까지 추출되지 않았기 때문에 전에 추출. 사용자가 쿠키에 기록하고 사이트를 남긴다 (10) 다음 질문을 해결되는지 지금 , 그 여분의 10 개 질문이 손실됩니다.

감사합니다, 판 카지

+0

사용자가 페이지에서 다른 곳으로 이동할 때 기능 (예 : AJAX 요청)을 실행하려면 어떻게해야합니까? 'beforeunload' [이벤트] (https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload)를 조사해야합니다. 당신이 다른 것을 요구하고 있다면, 나는 그것이 무엇인지에 대해 명확하지 않습니다. –

+0

사용자가 사이트를 떠나기로 결정한 시점을 알 수 없으므로 쿠키가 만료되기 전에 트리거가 발생해야합니다. 또는 사용자가 사이트를 탐색 한 후에 쿠키 데이터를 서버로 보낼 수있는 방법이 있습니다. – user34484

+0

세션 쿠키를 사용하는 것처럼 들리지만 실제로 세션을 종료하지 않고도 사용자가 사이트를 떠날 수 있다는 점에 유의하십시오. 세션은 대개 * 브라우저 *가 닫힐 때 종료됩니다. –

답변

0

"세션 쿠키가 만료되었을 때 어떻게 이벤트를 트리거 할 수 있습니까?"라고 묻는다면 브라우저가 특별한 API를 공개하지 않는 한 할 수 있다고 생각하지 않습니다. 브라우저가 닫히거나, 또는 특정 다 te/time-하지만 특정 창을 닫을 때 스크립트 실행이 중지됩니다.

  1. 가 서버에 요청을 보내는 beforeunloadevent 처리기를 추가 : 당신은 당신의 서버 로직을 변경하거나 사용자에게 명시 적으로 "저장"버튼을 제공하지 않으려면

    ,이 제안 사용자가 페이지를 떠나는 것을 나타내는 "flush"플래그와 함께 서버는 나머지 모든 데이터를 저장해야합니다.

  2. 사용자가 다른 질문 페이지로 넘어갈 예정이면 해당 이벤트 처리기를 비활성화하십시오.

2를 구현하는 방법은 현재 응용 프로그램이 질문 페이지간에 전환을 트리거하는 방식에 따라 다릅니다.

+0

감사합니다 Vidor! 당신의 접근 방식은 매우 유용합니다. – user34484

+0

@ user34484 도와 드리겠습니다. –

+0

감사합니다 Vidor! 귀하의 접근 방식은 매우 도움이됩니다. 포인트 2 나는 다음 URL을 요청 URL을 누른 다음 플래시 플래그를 무시하거나 다른 플러시 플래그를 존중하는 경우 서버가 요청한 다음 URL을 알고있을 수 태클 수 있습니다 .the 유일한 challange 내가 볼 때 사용자가 탭을 닫습니다/브라우저 자체. – user34484