取消设置所有$ _POST变量,以便在重定向时不会出现警告框

时间:2012-03-22 16:09:47

标签: php forms post

提交表单后,我有2个$ _POST变量。在目标网页中,我想将它们转换为$ _SESSION变量并取消设置$ _POST变量,以便用户不会收到浏览器再次发送数据的警报。这是我的(不工作)代码:

 if(isset($_POST['clave']) && isset($_POST['email'])){
   $_SESSION['id_user']=$_POST['clave'];  
   $_SESSION['email']=$_POST['email'];  
 }
 if(isset($_SESSION['id_user']) && isset($_SESSION['email'])){
   unset($_POST['clave']); 
   unset($_POST['email']);
   //I do my stuff here
 }

如果我回复帖子没有显示任何内容,但每次重新加载时我都会再次收到浏览器警告。

4 个答案:

答案 0 :(得分:8)

您不能只从服务器中删除$ _POST数据。浏览器会对其进行提醒,因为它是由浏览器存储的。如果它重新提交数据,那么它会将其发送回服务器并重新填充 $_POST

您需要做的是使用POST-REDIRECT-GET模式。

处理POST数据(例如,将其转储到会话中),然后向浏览器发送重定向而不是HTML文档。然后浏览器向服务器发出GET请求,然后给它们页面。

答案 1 :(得分:4)

这是不可能的。当用户点击重新加载时,PREVIOUS操作将重做,这是一个帖子。即使您在首次提交表单时取消设置POST值,重新加载操作也将是一个完全新的请求。浏览器将始终询问用户是否要重新提交数据。

为防止这种情况发生,您必须在帖子形成后将用户重定向到另一页。

e.g。

  1. 用户获取表单。
  2. 用户POST表单
  3. 服务器将用户重定向到新页面
  4. 用户获取新页面
  5. 用户点击重新加载
  6. user再次获取新页面 - 不执行POST。

答案 2 :(得分:2)

这不起作用,因为浏览器没有警告您服务器端,它要求确认它应该执行不安全的操作。

在大多数情况下,您应该使用POST/Redirect/GET pattern,而不会遇到此问题。

答案 3 :(得分:1)

它是一个旧帖子,但我也遇到了同样的问题,所以这里是简单的解决方案,

  1. 创建一个login.php ==>通过html格式发布两个变量

  2. 创建一个getHome.php ==>这将通过$ _POST ['myvar']收到两个变量;函数并将这两个发布的变量放在一个会话中,如果你愿意,也可以回复错误的用户n传递给你。

  3. 创建一个home.php ==>在这里你将把if条件用于检查会话,即if(isset($ _ SESSION ['myvar'])){display home} else {header('location:login.php'); *如果您直接访问home.php文件而没有登录,* header函数会将您重定向到login.php。

  4. 完成!!