【问题标题】:How can i make a page accessable only from a page that redirects the user to it? [closed]如何使页面只能从将用户重定向到它的页面访问? [关闭]
【发布时间】:2015-08-04 16:55:40
【问题描述】:

我想让一个页面只能从重定向到它的页面访问。这个重定向到这个页面的页面叫做/purchase.php,然后这个页面重定向到一个叫做/username.php的页面,我希望这个页面只能从/purchase.php访问,而不是直接从一个url访问。

解决方案: 购买.php:

<?php
session_start();
//Put this when the purchase is vailidated
$SESSION_['fromMain'] = "true";
//Then redirect
header ("Location: url.com/username.php");
?>

对于用户名.php:

<?php
//Check if the browser comes from purchase php
if($_SESSION['fromMain'] == "false"){
//If not redirect to index page
header ("Location: url.com/index.php
} else {
$SESSION_['fromMain'] = "false";
{
?>

【问题讨论】:

  • 不要从 PHP 向浏览器输出任何东西,当它完成时只是 HTTP 重定向并且浏览器 不应该 缓存它:你可能只是使用了站点搜索功能虽然:stackoverflow.com/questions/49547/…

标签: php html browser-history


【解决方案1】:

作为一项附加措施(除了 CD001 已经做出的评论),您可以使用 $_SERVER["HTTP_REFERER"] 变量,如果直接从浏览器界面请求脚本,则该变量将为空。

【讨论】:

  • 很好的答案,但我希望网站像这样工作:当用户完成购买时,索引页面会重定向到从用户和他的电子邮件获取交易 ID 的页面,然后这会将用户重定向到一个页面,该页面有一个表单供用户输入他想要的用户名,然后完成。我想让这个网站不能直接从 url 访问,而只能从将用户重定向到它的页面访问。
  • 看来您不仅在谈论防止页面在浏览器历史记录中被标记,而且还防止页面以其他顺序访问(以任何可以想象的方式)。我不确定您需要阻止直接访问哪些页面。如果序列是 a -> b -> c,在我看来,你想防止直接访问 b 和 c,对吧?除了 http referer,你还可以使用 post 数据,所以如果没有 post 数据,你会重定向到页面 a。当然,这并不能防止伪造帖子数据。
  • 我对 b 没有问题,我想阻止访问 c 并且只能从 b 访问
  • 似乎我们在这里讨论了多个问题,应该通过 headers 来防止 php 输出的缓存,通常 web 服务器应该自动为脚本请求添加适当的无缓存 headers。除此之外,您可能需要添加额外的预防措施,以防止有人尝试在您的预期顺序之外请求 b 和 c。
  • 我试图让 b 设置一个变量,然后 c 检查该变量是否为真,但由于某种原因它不起作用。
猜你喜欢
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 2011-12-25
相关资源
最近更新 更多