使用表单的PHP HTTP Basic Auth

时间:2010-08-13 08:38:58

标签: php http authentication

如何使用HTTP基本身份验证,让用户以HTML格式提交用户名和密码,并使用HTTP基本身份验证进行身份验证。

我听说Internet Explorer不再支持http://user:password@website.com的使用,所以我不知道解决此问题的最佳方法。

使用PHP和javascript和HTML就行了。我不想使用PERL而且我不会使用大的javascript库。

如果您不认为HTTP Basic Auth。是最好的方法,请推荐一些简单易行的方法。它只是5-6人的登录网站。无需复杂化。

4 个答案:

答案 0 :(得分:3)

jQuery库具有ajax函数,其具有用于Authentication的“password”和“user”参数。当用户单击登录时,您可以获得登录名和密码的值,并传递给$ .ajax函数。

$('#submit').click(function() {
   $.ajax({
      url: 'authenticated.php',
      username: $('#login').val(),
      password: $('#passwd').val(),
      success: function(data) {
         //do something with data from the server
      }
   });
   return false;
});

答案 1 :(得分:2)

恕我直言,使用HTTP身份验证的重点是能够委派身份验证任务:

  1. Web服务器负责拒绝未经授权访问受保护资源
  2. 浏览器负责在需要时询问用户名和密码
  3. 因此,您可以轻松地使用工作系统。

    现在,如果您使用HTML表单来请求凭据,服务器将知道您是谁,但浏览器不会:它会在找到WWW-Authenticate响应标头后立即询问凭据。 401状态代码。为此,浏览器必须在每个 HTTP请求上发送Authorization请求标头;但是,您的表单无法指示浏览器发送相应的HTTP标头。

    当然,您可以在PHP中编写自己的服务器端身份验证代码,将服务器配置为通过它解析静态文件,并在获得有效凭据后立即省略401WWW-Authenticate然后需要存储在其他地方,例如,PHP会话)。但是,您已经失去了HTTP身份验证的所有优势:此时,使用PHP会话的自定义登录处理程序将是一个更容易的解决方案。

    总结一下:

    • 如果您需要简单,请忘记HTML表单
    • 如果您需要HTML表单,请编写自己的代码

答案 2 :(得分:0)

如果我理解正确,你需要使用带有.htaccess的.htpasswd:http://tools.dynamicdrive.com/password/

答案 3 :(得分:-1)

  

如何使用HTTP基本身份验证并让用户以HTML格式提交用户名和密码

没办法。

  

请推荐一些简单易行的方法。

会议,饼干。
google for PHP auth tutorial并获得超过9000篇文章

哦,其中一个

<?
if (isset($_POST['auth_name'])) {
  $name=mysql_real_escape_string($_POST['auth_name']);
  $pass=mysql_real_escape_string($_POST['auth_pass']);
  $query = "SELECT * FROM users WHERE name='$name' AND pass='$pass'";
  $res = mysql_query($query) or trigger_error(mysql_error().$query);
  if ($row = mysql_fetch_assoc($res)) {
    session_start();
    $_SESSION['user_id'] = $row['id'];
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  }
  header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  exit;
}
if (isset($_GET['action']) AND $_GET['action']=="logout") {
  session_start();
  session_destroy();
  header("Location: http://".$_SERVER['HTTP_HOST']."/");
  exit;
}
if (isset($_REQUEST[session_name()])) session_start();
if (isset($_SESSION['user_id']) AND $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) return;
else {
include 'your design here.php';
?>
<form method="POST">
<input type="text" name="auth_name"><br>
<input type="password" name="auth_pass"><br>
<input type="submit"><br>
</form>
<? 
}
exit;
?>

打算放入文件并在脚本顶部调用require '/path/auth.php';