2012-03-31 2 views
-1

사용자가 내 사이트에 로그인하려고하면 사용자 이름과 비밀번호가 POST 변수로 전송됩니다. 페이지가로드되면 변수를 가져 와서 처리하고 로그인 성공 여부를 결정합니다. 그런 다음 사용자의 성공 또는 실패를 알리는 메시지가 포함 된 페이지를 렌더링합니다.브라우저가 포스트 변수를 다시 보내지 못하도록합니다.

내 문제는 사용자가 F5를 누르거나 새로 고침하면 브라우저에서 로그인 데이터를 다시 보내라는 메시지가 표시된다는 것입니다. 페이지를 다시로드하지 않고 피할 수있는 방법이 있습니까? 아마 일부 자바 스크립트? 그렇지 않다면 페이지를 새로 고치기 위해 머리글을 보낼 수는 있지만 사용자에게 메시지를 표시하는 방법은 무엇입니까?

지금은 페이지로드시 사용자에게 표시 할 정보 배열을 포함하는 user_message 개체가 있습니다.

답변

5

새 페이지로 리디렉션해야합니다. 이렇게하면 사용자가 페이지를 새로 고칠 때 POST 변수가 없습니다.

form -> form handler -> success/failure page 

두 번째 화살표는 리디렉션입니다.

+0

그래서 이것을 해결하는 자바 스크립트 방법은 무엇입니까? – ppp

+0

일반 양식 요청 대신 AJAX 게시 할 수 있습니다. 브라우저가 마지막 전체 (!) 요청을 "캐시"하기 때문에 다른 솔루션이 아닙니까? 전송 된 데이터 –

+0

@AnPel "자바 스크립트 방식"이란 무엇입니까? 양식은 PHP가 처리하므로 Javascript와 관련이 없습니다. 정교하게 제발 주시겠습니까? – PeeHaa

1

POST 변수를 확인하고 로그인이 성공했는지 여부를 결정한 다음 header('Location: success.php'); 또는 뭔가를 실행할 수 있습니다.

3

이 해결책은 PRG pattern입니다. 게시 된 페이지에서 로그인 정보를 처리 한 다음 GET으로 다른 (결과) 페이지로 리디렉션합니다.

1

"Location : whatever"헤더를 사용하여 다른 URL (또는 POST에서도 동일한 GET 요청이 될 때까지 동일하게 리디렉션)을 수행하십시오. 그 전에 $ _SESSION 변수로 세션에 정보를 저장하십시오. 또는 URL에 메시지를 저장할 수 있습니다. 사용자를 loginresult.php? badlogin = 1로 리디렉션하면됩니다. 대상 페이지에서 필요한 모든 메시지를 표시하십시오. 당신은 PRG Pattern

을 사용할 수 있습니다

2

그것은 새로운 페이지로 그를 리디렉션하여 다시 전송에서 사용자를 방지 할 수 있습니다. 이는 추가 왕복을 의미하지만 대부분 문제가되지 않습니다.

관련 문제