2014-09-12 28 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