单击链接有时会导致“打开文件”对话框而不是导航到页面

时间:2011-06-28 21:10:22

标签: php

我在运行PHP 5.3.6的Unix服务器上运行PHP文件。这些文件会将会话变量检查为保护对它们的访问权限的一种形式。这种方法过去对我有用,大部分时间都在这里工作。

我遇到的问题有时候当您浏览网站时,会打开打开的文件对话框而不是导航到该页面的浏览器。提供下载的文件是与您列出的文件同名的php文件,但是为0字节。如果您点击取消并再次点击该链接,通常情况继续正常。但是,如果您要提交表单信息,则这是一个问题。

过去我偶尔会遇到这个问题,甚至在使用PHP构建的其他公司网站上看过几次(Facebook已经完成了两三次),但这种情况并不像我在这个问题上看到的那么频繁站点。

<?php

session_start();
$_SESSION['admin'] = 1;
header('Location: policy.php');

是会话设置方式的一部分(实际的凭证检查被遗漏了,因为示例中没有必要)。

<?php
require "../php/secure.php";

是每个“安全”页面的顶部。 secure.php的内容是:

<?php
session_start();

if( $_SESSION['admin'] != 1 )
{
    header('Location: index.php');
}

这是完整的secure.php文件,没有关闭?&gt;。

任何关于为什么会发生这种情况的想法都会非常感激,我无法想出为什么只会在某些时候发生这种情况并且完美地工作。

谢谢。

1 个答案:

答案 0 :(得分:2)

您应该使用HTTP检查器(如fiddler2或FireFox插件TamperData)来查看发生时的请求和响应。通常情况下,会发生以下两种情况之一:

  1. 您正在发送标题,表明该类型应该下载而不是在浏览器中显示
  2. 您正在写出一些浏览器认为无法呈现的数据(例如,ASCII值低于30(0x1D)的字节,这些数据被视为控制字符,并且不打算打印)。