我知道非常基本的PHP和網絡編程。這是我的PHP代碼。我見過幾個類似的問題。他們用未設置的函數取消設置全局變量。我希望每次用戶打開網址,輸入用戶名和密碼提示,輸入用戶名密碼後,如果輸入正確,請下載文件並刪除用戶名和密碼,如果有錯,請刪除用戶名和密碼,再次提示輸入用戶名密碼。如何在php中取消設置全局變量?
<?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();
}
}
?>
目前由於某種原因,用戶名和密碼保留在全局變量中。如果您能提出建議或提示,我會很感激。
編輯
這並沒有工作,要麼:
功能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;
}
}
鏈接到文件:http://behzadgarekani.net16.net/
的PHP中的$ _SERVER變量僅僅是CGI環境變量的副本,從您的網絡服務器。一旦Basic HTTP握手完成,客戶端將在*每個*請求中重新發送它們。在每個任務中觸發授權彈出窗口是不可行的,當然也是錯誤的方法。爲什麼用戶必須這樣糾纏? – mario 2014-09-12 21:32:31
@mario感謝您的回覆。我認爲你是對的。我做了所有的答案,但沒有奏效。正如你所說,一旦密碼正確,它將被保存,下一次沒有密碼,它正在下載。但我需要這個文件的高安全性和客戶端電腦在護士共享的醫院。所以我們不想保存用戶和密碼。 – Bernard 2014-09-12 21:39:04