2012-12-14 2 views
0

간단한 질문이지만,이 문제를 스스로 해결하려고 시도했지만 세션 변수를 사용하면 왜 페이지가 다시로드되고 어떻게 수행되는지 알아 내려고 할 때 혼동을 줄 수 있습니다.페이지를 새로 고침하면 게시물이 생깁니 까?

(스크립트되지 않은) 환경에서 페이지 재로드 (JavaScript, f5, ctrl + f5, 브라우저 재로드 버튼 등)가 발생하면 양식 재 게시가 발생합니까?

는 (이 아래 예제 코드와 같은 C# 코드 내에서 IfPost 가지를 사용하여 관련된) :

if(IsPost) 
{ 
    //stuff that only executes if the previous request was a post. 
} 

난 그냥 가지 내가 제대로 내 세션 상태 문제를 진단 할 수 있도록 여기에 무엇을 기대해야하는지 알 필요가있다.

도움 주셔서 감사합니다.

(또한이 질문을 지나치게 단순화 한 경우 미안하지만 간단한 대답 만 제공 할 수있는 것보다 복잡 할 수 있음을 알고 있습니다.)

** * ** * UPDATE* ** * ** * * 또한 는 I이 사본 찾았다 ** 여기 StackOverflow에 질문이 있지만 아무것도 보지 못했습니다. 중복 된 질문 인 경우 사과드립니다.

여기에 대한 답은 모두 좋은 답변입니다. 나는 또한 내 질문에 대한 해결책을 제시 한 대답을 받아 들였고, PRG가 그것을 할 수있는 유일한 방법은 아니지만 그것이 최고일지도 모른다. 또한 클라이언트 쪽 사용자 편의를 처리하는 방법이 점점 커지고있는 것처럼 보이며 imho는 들어가는 것이 좋은 습관이 될 것 같습니다.

나를 보여 주셔서 감사합니다!

답변

5

예. POST 데이터를 사용하여 페이지가로드 된 경우이 오류가 발생합니다. 이를 방지하려면 POST/REDIRECT/GET pattern을 구현해야합니다.

Post/Redirect/Get (PRG)은 중복 양식 제출을 방지하여 사용자 에이전트 (사용자)를위한보다 직관적 인 인터페이스를 만드는 웹 개발 디자인 패턴입니다. PRG는 북마크와 새로 고침 버튼을 예측 가능한 방식으로 지원하여 중복 된 양식 제출을 생성하지 않습니다.

+0

내가 가진 한 가지 질문 : 민감한 정보 (사회 보장 번호 등)를 올리려는 사람이 볼 수있는 쿼리 문자열을 생성하지 않으면 어떻게됩니까? – VoidKing

+0

여기에 몇 가지 정보가 있습니다. ;-) –

2

예. 누군가 브라우저를 수동으로 새로 고치면 양식 데이터를 다시 보낼지 묻는 메시지가 표시됩니다. 그러면 해당 코드가 실행됩니다.

0

처리 방법은 토큰을 사용하는 것입니다.

  1. 어딘가에
  2. 당신이 포스트 데이터를 확인
  3. 이 저장된 문자열이 게시 요청에 문자열와 동일한 지 확인 후 데이터가
  4. 저장이 임의의 문자열을 함께 임의의 문자열을 보냅니다.
  5. true 인 경우 요청을 처리하십시오.
  6. 는 생성 새로운 토큰

누군가가 새로 고침 후 데이터를 다시한다면, 포스트 요청 토큰은 5 단계

에서 새로운 토큰을 생성하기 때문에 별도로 저장되어있는 것과 다른 것
관련 문제