如何禁用对html的直接输入

How to disable direct entry to a html?

本文关键字:输入 html 何禁用      更新时间:2023-09-26

假设我有两个名为html1和html2的html文件。html1包含一个嵌入的swf文件。

现在我想要的是,用户不能直接通过url访问html2。他必须通过html1中swf中的链接点击它。有办法做到这一点吗?

如果在html中不可能,那么在php中可能吗?

感谢

编辑:

在得到John的回答后,我继续尝试他的建议,但我永远无法访问file2.php,即使我以前去过file1.php。它不断将我重定向回file1.php,即使不应该这样做。

我的代码来自file1.php

//file1.php
<?php
session_start();
$_SESSION['enableAccessTill']=strtotime("+5 minutes");
?>

这里是file2.php

//file2.php
<?php
session_start();
if(!isset($_SESSION['enableAccessTil'])||$_SESSION['enableAccessTil']<time())
{
header("Location: indexFLA.php");
exit;
}
?>

我可能做错了什么?

发现了它,这是由于拼写错误-"enableAccessTil"answers"enableAccessTil"

专业解决方案:
创建受保护的目录,在目录中创建.htaccess文件,并将所有嵌入和部分文件复制到目录中
此目录无法访问whit-get-url
但是您可以包括文件whit-php-includerequire方法
.htaccess内容:

deny from all

这在纯html中是不可能的。php是一种简单的方法,它在文件1中设置一个会话变量,并在文件2中测试用户对文件1的访问。

文件1:

 <?php
   session_start();
   $_SESSION['enableAccessTill'] = strtotime("+5 minutes"); //set the time here till when the user has access
   [...]

file2

 <?php
  session_start();
  if(!isset( $_SESSION['enableAccessTill'] ) || $_SESSION['enableAccessTill'] < time() ){ //If time is expired
    header("Location: file1.php"); //redirect user to the first file
    exit;
  }
[...] //continue your script here.

引用者检查通常会失败(一些浏览器/防火墙会阻止该变量)。

根据您所描述的选项,将html2设置为php脚本并检查referrer是否为html1文件听起来是最合理的。如果是这种情况,脚本应该显示正常的html1内容,否则应该显示错误消息。

如果一个狡猾的用户知道发生了什么,他们仍然可以绕过这一点,但这对大多数观众来说应该没问题。

php可能。

在index.php,您必须编写

<?php
define('START', true);
include 'file.php';

在file.php上需要写入

<?php defined('START) or die('Direct access!!'); ?>
<embed> your swf file embed

通过这种方式,您将阻止直接访问

您可以通过使用会话变量使用PHP来实现这一点。在html1中启动会话。在html2中检查会话。如果存在,则显示html2。如果没有,则不要显示html2。在任何一种情况下,都可以在html2中销毁会话。

使用html是可行的,您有两个选项,一个是cookie,另一个是html5 中的本地存储

localStorage.hasClick = true;
alert(localStorage.hasClick);

http://www.html5rocks.com/en/features/storage

但很明显,直接的解决方案是php/c#/ruby/等…

//当我说html时,我指的是仅使用客户端html/javascript