单击我网站上的后退按钮时处理不良行为

时间:2011-02-19 17:18:21

标签: php back-button navbar

我已经四处寻找这个问题的答案了,我慢慢接受这样一个事实,即我可能会以错误的方式解决问题,但这里要求提供一些可能有用的精彩智慧之珠! / p>

我正在开发一个左侧有目录样式导航栏的网站。所以一开始用户只会看到两个目录(语法/词汇 - 这是一个英语学习网站),点击目录,它将“打开”以显示其内容(其他页面或目录)。

我的工作方式是每个目录都是一个表单提交按钮,在单击时重新加载页面,但是$ _POST中的值告诉站点打开或关闭文件夹(这是在一个数组中完成的) $ _SESSION)。它很棒!但问题是,如果用户点击浏览器中的后退按钮,他们会询问是否要重新提交数据,这不是我想要的。

我想知道是否有一种方法可以在php中检测到是否按下了后退按钮,因此不会重新加载页面并对侧栏进行更改,侧栏将保持不变,而不是用户被带到他们访问过的最后一页。

我知道真正解决这个问题的方法可能只是重新考虑边栏,任何有关更好方法的建议都会受到赞赏!

迈克尔

3 个答案:

答案 0 :(得分:4)

您收到提示的原因是因为如果要发送的数据要修改某些内容,则应该使用POST,因此使用后退按钮提交POST请求可能会出现意外行为(如重复数据)。

使用GET替换POST应该禁用提示。

HTML
来自:

<form action="page.php" method="post">
</form>

要:

<form action="page.php" method="get">
</form>

PHP
将引用从$_POST['']更改为$_GET['']

答案 1 :(得分:1)

  
<?php
        session_start();        
        if( $_GET['t'] == $_SESSION['token'] ||  $_SESSION['directory'] == $_GET['q'] || !isset($_GET['q']) ) { 
          echo "<h1><span>you going</span> forward</h1>";
        } else {
          echo "<h1><span>you going</span> backward</h1>";
          echo "<p>should be <strong>{$_SESSION['directory']}</strong> directory</p>";
        }        
           $token = uniqid();  
           $_SESSION['token'] = $token;
           $_SESSION['directory'] = $_GET['q'];  
?>

<a href="index.php?q=grammar&t=<? echo $token; ?>">grammar</a>
<a href="index.php?q=vocabulary&t=<? echo $token; ?>">vocabulary</a>

  

答案 2 :(得分:0)

作为Web开发的一般规则,您只应在提交不希望重新提交的数据时执行帖子,或者您不希望在服务器上的日志中显示。一旦你发帖,你应该使用get参数或其他方法重定向。

如果你使用get参数而不是post,那么你可以让页面导航无状态,只需获取他们要求的页面。

有一些方法可以检测后退按钮是否被按下,但是它们难以保持一致,并且可能会让用户感到沮丧,因此建议您采用另一种方式。