2014-09-12 32 views
2

我知道非常基本的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/

+1

的PHP中的$ _SERVER變量僅僅是CGI環境變量的副本,從您的網絡服務器。一旦Basic HTTP握手完成,客戶端將在*每個*請求中重新發送它們。在每個任務中觸發授權彈出窗口是不可行的,當然也是錯誤的方法。爲什麼用戶必須這樣糾纏? – mario 2014-09-12 21:32:31

+0

@mario感謝您的回覆。我認爲你是對的。我做了所有的答案,但沒有奏效。正如你所說,一旦密碼正確,它將被保存,下一次沒有密碼,它正在下載。但我需要這個文件的高安全性和客戶端電腦在護士共享的醫院。所以我們不想保存用戶和密碼。 – Bernard 2014-09-12 21:39:04

回答

1

我認爲你正在做它用好未設置()函數,但我看到一個小無序代碼。 我認爲,在這種方式,您將可以做到這一點,你想:

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']) && $_SERVER['PHP_AUTH_USER']=='admin' && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW']=='admin') { 
    //download the file 

    destroy_foo(); 
} else { 
    header('WWW-Authenticate: Basic realm="My Realm"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo 'Text to send if user hits Cancel button'; 
} 
+1

我發現不能取消設置服務器變量(運行Linux/Apache) – Aba 2017-07-20 21:19:00

1

請參閱使用$GLOBALS

$ GLOBALS - 參考文獻在全球範圍內提供的所有變量

說明¶

包含對當前在腳本的全局範圍中定義的所有變量的引用的關聯數組。變量名稱是數組的鍵。

您可以使用此作爲

unset($GLOBALS[_SERVER]); 
+0

我的問題是當我輸入用戶傳遞我下載文件。而當我再次點擊url鏈接時,它仍然有某處用戶名密碼,並且沒有提示用戶和密碼,請再次下載該文件! – Bernard 2014-09-12 21:29:51