4

我网站的网页通过使用GET从预定义的 URL 检索变量来显示网页。例如第一页的代码: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 并且我对我网站的所有网页都使用这种方法,但是如果用户为标签添加书签,他们将拥有该网页的过时信息,因为包含该页面内容在网址中。

编辑:如果我使用post它们会是将该信息传达给新网页的更好方式吗?代替:

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

4 回答 4

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 分钟),它将被重定向到主页!

但是这种方法对用户不是很友好!您最好尝试建立您的链接,以便他们在访问时永远不会获得旧内容!

于 2013-07-17T18:35:17.643 回答
0

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

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

于 2013-07-17T18:33:01.320 回答
0

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

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

于 2013-07-17T18:34:36.090 回答
0

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

于 2013-07-17T19:52:20.500 回答