【发布时间】:2014-11-07 03:21:15
【问题描述】:
我非常了解 php 和 web 编程。这是我的php代码。我见过几个类似的问题。他们使用 unset 函数取消设置全局变量。我希望每次用户打开网址时,都会提示用户名和密码,输入用户名密码后,如果正确则下载文件并删除用户名和密码,如果错误则删除用户名和密码并再次提示输入用户名密码。
<?php
function destroy_foo()
{
if (isset($_SERVER['PHP_AUTH_USER'])) {
unset($_SERVER['PHP_AUTH_USER']);
}
if (isset($_SERVER['PHP_AUTH_PW'])) {
unset($_SERVER['PHP_AUTH_PW']);
}
}
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
$file = 'welcome.txt';
if($_SERVER['PHP_AUTH_PW'] == "admin" && $_SERVER['PHP_AUTH_USER'] =="admin"){
destroy_foo();
if (file_exists($file)) {
//Do some task
destroy_foo();
exit;
}
}
else
{
//Do some task
destroy_foo();
}
}
?>
目前用户名和密码出于某种原因保留在全局变量中。如果您能提供建议或提示,我将不胜感激。
编辑
这也不起作用:
function destroy_foo()
{
if (isset($_SERVER['PHP_AUTH_USER'])) {
unset($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_USER'] = null;
}
if (isset($_SERVER['PHP_AUTH_PW'])) {
unset($_SERVER['PHP_AUTH_PW']);
$_SERVER['PHP_AUTH_PW'] = null;
}
}
【问题讨论】:
-
PHP 中的 $_SERVER 变量只是来自您的网络服务器的 CGI 环境变量的副本。基本 HTTP 握手完成后,客户端将在 每个 请求上重新发送它们。在每个任务上触发授权弹出窗口是不可行的,当然也是错误的方法。为什么要这样纠缠用户?
-
@mario 感谢您的回复。我认为你是对的。我做了所有的答案,但没有奏效。如您所说,一旦密码正确,它将被保存,下次没有密码时正在下载。但是我需要为这个文件提供高度的安全性,并且客户端计算机在医院里,由护士共享。所以我们不想保存用户和密码。
标签: php global-variables unset