문제

나는 사용하고있다 PRG 패턴 여러 양식 제출을 피하기 위해. 그러나 그것은 심각한 단점이 있습니다. 단순히 echo 사용자에게 확인 메시지가 표시됩니다 (분명히, 사용자는 페이지가 표시되지 않으며 다른 페이지로 리디렉션됩니다).

이 문제에 대한 해결책은 무엇입니까? 나는 그들 중 두 명을 알고 있지만, 그들 중 누구도 완벽 해 보입니다.

  • 다음과 같은 사용자 정의 리디렉션 URL을 사용하십시오. http://example.com/?msg=data-saved. 그것은 상태가 없기 때문에 매우 신뢰할 수 있다고 생각합니다. 그러나 사용자가 링크를 복사하고 북마크 등 문제가 발생합니다.
  • 세션 변수/쿠키를 저장하고 모든 페이지로드에서 확인하십시오. 설정되면 지우고 메시지를 표시하십시오. 괜찮아 보이지만 이것에 대해 잘 모르겠습니다. 쿠키에 크게 의존하고 조금 더 복잡합니다.

아니면 내가 모르는 다른 방법이 있습니까? 세션과 URL 매개 변수의 일부 조합? Dunno.

당신의 의견에서 가장 좋은 방법은 무엇입니까? 어느 것이 가장 적은 단점이 있습니까? 장단점은 무엇입니까?

도움이 되었습니까?

해결책

사용자가 로그인 할 수있는 거의 모든 웹 사이트는 쿠키에 의존하여 그렇게합니다. 완벽한 솔루션은 아니지만 우리가 얻은 최고입니다.

또한 세션 처리는 웹 개발 프레임 워크가 일반적으로 당신을 돌보는 것들 중 하나입니다.

다른 팁

이 문제를 해결하는 몇 가지 다른 스택 오버 플로우 질문이 있지만 문제를 명확하게 요약 한 적이 없다고 생각합니다. 다음은 다음과 같습니다.

편리한 솔루션의 대부분은 세션 기반이거나 더 심각한 단점이 있습니다 (예 : QueryString에 메시지를 포함).

세션이 있다고 보장 할 수없는 경우, 또 다른 (비용이 많이 드는) 방법은 양식 제출 결과에 따라 다른 뷰로 리디렉션하는 것입니다. 예를 들어, 리디렉션 할 수 있습니다 EditWidgetView, EditWidgetSaveSuccessfulView, 또는 EditWidgetSaveErrorView (또는 아마도 당신은 오류에 대해 리디렉션하지 않을 것입니다). 일부 언어와 프레임 워크에서는 확인 / 오류 메시지를 전혀 보여주는 것을 포기하는 시점에 비현실적이지만 다른 경우에는 그만한 가치가있을 수 있습니다.

어떤 이유로 든 세션에 의존하지 않으려면 get variable / custom URL을 사용할 수 있고 해당 변수가있는 경우 참조를 확인하십시오. 참조가 적절한 경우 메시지를 표시하십시오. 예, 이것은 확인 메시지를 표시하기 위해 전송되는 것을 참조하지만, 그렇지 않으면 세션에 의존하고 있습니다 (신뢰할 수 있지만 모든 솔루션에 100% 완벽하지는 않습니다.)

그리고 솔직히, 이런 종류의 것에 대해 일반적으로 좋은 일부 큰 사이트는 URL에 "actiondone = true"를 고정시킵니다. (Facebook이 어떤 곳에서 그것을하는 것을 보았습니다.)

그것은 당신이 실행중인 플랫폼에 따라 다릅니다.

Ruby on Rails는이 플래시를 호출합니다 [: cotent] = "귀하의 작업이 수행되었습니다", ASP.NET MVC는이 tempData를 호출합니다 [ "통지"] = "귀하의 동작이 수행되었습니다"...

기본적으로 그들은 단일 왕복을 위해 httpsession에 데이터를 저장합니다. 이렇게하면 다른 웹 요청에서 데이터를 검색 할 수 있습니다.

이 토론에 아주 늦었습니다 ..

제안 된 두 가지 옵션의 조합을 사용할 수 있습니다.

사후 요청 후 클라이언트가 리디렉션 (303)이 URL 로이 요청에 대한 응답 메시지가있을 수 있음을 나타내는 URL로 리디렉션됩니다.

Client: GET  http://example.com/foo.cgi
Server: 200  Ok

Client: POST http://example.com/bar.cgi
Server: 303  http://example.com/foo.cgi?msg=true

만약 msg 논쟁은 true 메시지는 세션에서 찾아보고 클라이언트에 대한 응답에 포함됩니다 (발견 된 경우).
만약 msg 논쟁은 ! true (또는 존재하지 않음), 조회 단계가 건너 뜁니다.

이 솔루션을 사용하면 실제 메시지가 URL에 표시되는 것을 방지하면 URL은 메시지가있을 수 있음을 나타냅니다. 또한 메시지는 필요할 때만 표시됩니다 (= 세션에서 찾을 때).

또 다른 장점은이 솔루션을 사용하면 적절한 현금 관리가 HTTP 응답에 포함될 수 있다는 것입니다.

세션 변수 방법을 사용합니다. URL에 표시하기 위해 오류 메시지를 포함시키는 것을 좋아하지 않습니다. 특히 URL 절약/공유 문제가 주목을받는 경우 사용자가 대상 페이지를 다시로드하면 깨끗한 인스턴스가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top