2012-03-31 71 views
-1

当用户尝试登录我的站点时,其用户名和密码将作为POST变量发送。当页面加载时,我得到变量,处理它们并决定登录是否成功。然后我渲染我的页面,其中包含一条消息,通知用户其成功或失败登录。阻止浏览器重新发送帖子变量

我的问题是,如果用户点击F5或刷新,浏览器会提示他们重新发送登录数据。有没有办法避免它没有重新加载页面?一些JavaScript可能?如果没有,那么我可以发送一个头来重新加载页面,但是我将如何显示消息给用户?

现在我有一个user_message对象,其中包含一个信息数组以显示页​​面加载用户。

回答

5

您应该重定向到新页面。这种方式当用户刷新页面时,不会有POST变量。

form -> form handler -> success/failure page 

其中第二个箭头是重定向。

+0

那么没有JavaScript方式来解决这个问题? – ppp 2012-03-31 18:40:34

+0

你可以AJAX发布数据,而不是做出正常的表单请求。 因为浏览器“缓存”了最后一个完整(!)请求,所以没有其他解决方案。发送的数据。 – 2012-03-31 18:42:13

+0

@AnPel你是什么意思的“JavaScript方式”??表单由PHP处理,所以我没有看到Javascript与它有什么关系。你能否详细说明一下? – PeeHaa 2012-03-31 18:45:16

1

您可以检查POST变量,决定登录是否成功,并执行header('Location: success.php');或其他。

3

对此的解决方案是PRG pattern。您从POST页面处理登录信息,然后使用GET重定向到另一个(结果)页面。

1

使用“Location:whatever”标题重定向到另一个URL(或甚至相同,但下一次它将成为POST的GET请求intead)。在此之前,使用$ _SESSION变量在会话中存储一些信息。或者您可以将您的消息保存在URL中,只需将用户重定向到loginresult.php?badlogin = 1。在目标页面中,显示您需要的任何消息。

2

您可能需要使用PRG Pattern

它可以防止用户通过重定向他到一个新的页面重新发送。这意味着额外往返,但大多没有问题。