如何防止用户为URL添加书签?

时间:2013-07-17 18:29:56

标签: php html forms url get

我的网站的网页显示网页,方法是使用GET从预定义的网址中检索变量。 例如,第一页上的代码:index.php

<p><a href="/blank.php?name1=value1&amp;name2=value2">next page</a></p>

第二页:blank.php?name1=value1&amp;name2=value2

$name1 = $_GET['name1'] ;
$name2 = $_GET['name2'] ;
echo $name1 ;
echo $name2 ;

这种方式网页是在现场创建的,并且显示类似于CMS,并且对我网站上的所有网页使用此方法,但如果用户为选项卡添加书签,则他们将拥有该网页的过期信息,因为该网页内容包含在URL中。

编辑:如果我使用post,他们会更好地将这些信息传达给新网页吗?而不是:

<form method="post" action="blank.php">
    <input type="hidden" name="name1" value="value1">
    <input type="submit">
</form>

4 个答案:

答案 0 :(得分:2)

快速而肮脏的解决方案:为您的网址添加时间戳参数,例如:

<p><a href="/blank.php?name1=value1&amp;name2=value2&amp;time=<?php echo time(); ?>">next page</a></p>

然后,在页面上,检查时间戳是否早于某个持续时间:

if(!isset($_GET['time']) || time() - intval($_GET['time']) > 60*60) {
    header('Location: index.php');
}

$name1 = $_GET['name1'] ;
$name2 = $_GET['name2'] ;
echo htmlspecialchars($name1);
echo htmlspecialchars($name2);

因此,如果链接超过一小时(60秒60分钟),则会重定向到主页!

但是这种方法不是非常用户友好!您最好尝试构建链接,以便在访问时永远不会获得旧内容!

答案 1 :(得分:0)

您可以阻止用户使用键盘快捷键进行书签,但我认为无论如何都不会阻止用户在浏览器中为其添加书签(或者写下此处的URL)。

您可能希望在每个页面加载时在页面上生成数据,因此,如果用户为URL添加书签,则会看到最新信息。或者,如果用户没有按照某个路径到达该路径,则会显示一条消息,告诉他们数据已过期。

答案 2 :(得分:0)

使用POST代替GET大部分都会解决问题,但我知道这可能无法实现,具体取决于您已创建的代码量。另一种可能的解决方案是设置会话变量以确定该人是否应该有权访问此页面。如果他们没有访问权限,则将其发送回目标网页,个人资料或登录页面。我这样做是通过放置只能在一个页面上设置的会话变量,然后在查看页面后销毁,这样他们就不能简单地返回页面,因为会话值已经消失。

可悲的是,无法阻止人们为您的网页创建书签,您只需要过滤掉谁可以查看(编辑或访问)它。

答案 3 :(得分:0)

您实际上只讨论用户会话,在此期间所有变量都有意义。即使使用POST也无法解决问题。在极端情况下,可以发出POST请求(或搜索引擎可能会这样做)并错误解释检索到的结果。我建议像许多其他网站一样添加一个sessionid,并在后端添加以控制有效的时间范围。这样您就可以更好地控制您的网站功能和用户体验。会话是否已过期应取决于您的业务逻辑,而不是GET / POST方法。