Php 通过表单发送基本身份验证信息

Php 通过表单发送基本身份验证信息,php,authentication,login,basic-authentication,Php,Authentication,Login,Basic Authentication,我在一个网站上工作,该网站目前使用基本身份验证对话框登录系统,这是您在此处看到的对话框类型: 我没有设置这个系统,也无法轻松/快速地解决它,但它确实有效。然而,问题是对话框在告诉您必须使用什么登录信息(即用户名和密码的组合)方面没有太大帮助,因此我想用一个表单替换它。我一直认为这是不可能的,但我想问一下,以便找出答案 是否可以设置一个HTML表单,将数据发送到服务器,使其以与使用此对话框相同的方式接受数据?或者,是否可以设置一个PHP脚本,该脚本将采用普通形式的数据,并以某种方式对其进行处理,然

我在一个网站上工作,该网站目前使用基本身份验证对话框登录系统,这是您在此处看到的对话框类型: 我没有设置这个系统,也无法轻松/快速地解决它,但它确实有效。然而,问题是对话框在告诉您必须使用什么登录信息(即用户名和密码的组合)方面没有太大帮助,因此我想用一个表单替换它。我一直认为这是不可能的,但我想问一下,以便找出答案

是否可以设置一个HTML表单,将数据发送到服务器,使其以与使用此对话框相同的方式接受数据?或者,是否可以设置一个PHP脚本,该脚本将采用普通形式的数据,并以某种方式对其进行处理,然后将其传递给服务器,以便服务器登录

编辑:在被告知这是基本的身份验证后,我四处奔走,设法找到了一种有效的方法,让用户持续登录。但是,这在internet explorer中不起作用。解决方案只是将用户重定向到:
但大约3年前,由于网络钓鱼的使用,Internet Explorer将其删除。有没有办法使用javascript让浏览器以这种方式访问站点?或者我需要简单地更改我的UI吗?

您可以用表单替换它。使用

基本访问认证 您可以通过curl执行基本身份验证

<?php 
// HTTP authentication 
$url = "http://www.dur.ac.uk/vm.boatclub/password/index.php"; 
$ch = curl_init();     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");  
$result = curl_exec($ch);  
curl_close($ch);  
//echo $result; 
?> 
在发送标头之前,不应回显任何数据($result),否则将出现错误

一些快速链接:

经过一段时间的研究,我发现了一种在Chrome和IE中都能工作的方法,这就是我测试它的全部内容,但代码的逻辑并不意味着它应该在任何地方出现故障。它基于这篇文章:

这是相当深入的,但关键是——在表单提交中,您向基本的已验证文件夹发出AJAX请求。AJAX请求可以接受基本身份验证的用户名和密码信息,并且一旦浏览器进行了身份验证,一旦在该领域获得授权,即它将保持登录状态。上一篇文章是用纯javascript实现的,因此除了简单地解释链接之外,还需要添加一些东西,这里有一个使用jQuery的(希望相当透明)实现:

  $(document).ready(function()
  {
    $('#loginForm').submit(function()
    {
      var username = $('#usernameInput').val();
      var password = $('#passwordInput').val();

      $.ajax(
        {
          'password' : password,
          'username' : username,
          'url'      : 'http://www.website.com/basic-auth-file.php',
          'type'     : 'GET',
          'success'  : function(){ window.location = 'http://www.website.com/basic-auth-file.php'; },
          'error'    : function(){ alert('Bad Login Details');},
        }
      );

      return false;
    });
  });

这达到了我想要的,并且相对简单易懂,但是我会恳求任何想要这个的人出去,并且不知道basic auth的人出去做研究

这让人放心,它确实存在,谢谢你,但我对它的实现有点困惑。这里的脚本,要在哪里执行?这是否会将用户和密码信息发送到“$url”中给定的页面?那么这本质上是一个标题重定向的问题,你应该被允许直接进入吗?谢谢这是您要创建的表单中的帖子。myusername=$\u POST['username']和&mypassword=$\u POST['password']。然后你做基本的auth,我刚查过,现在我知道发生了什么,因为你已经设置了RETURNTRANSFER,那么$result将包含该页面的HTML,然后被回送。有没有办法直接进入该页面,保持登录状态?更重要的是,在该页面上,链接需要工作并保持用户登录。我对此类交互的了解非常有限,因此这只是我的最佳猜测,但我相信问题在于浏览器在访问新链接时没有发送回相应的cookie。当访问这个“卷曲”页面时,浏览器会接收到标题中类似cookie的内容(我假设Set cookie就是这样做的),但它不会在单击链接时将其发送回。你能让curl告诉浏览器在每个新请求中发送cookie吗?@volatirestorm。哎呀,我所说的并不完全正确。我会再考虑一下,然后再打给你。我想我有两个解决方案。我从你上面提到的网站开始,然后找到了这篇文章。来自另一个站点的代码、您的代码以及@alfred's answer中的链接都会提示我在所有浏览器上输入凭据。我需要一些可以在iPhone上工作的东西(没有curl),所以我的客户端可以选择允许Safari保存表单字段。在触摸键盘上输入用户名和密码是一件非常痛苦的事情。我现在真的不知道如何回复,这在我的网站上确实有效。我建议你自己问一个问题,并说明具体情况。Alfred的代码是服务器端的东西,它要求您包装每个页面,因此不是最佳解决方案。我的代码在每个会话中也只能工作一次(因为浏览器在会话之间忘记了基本的身份验证信息)。我也知道这在我的iPhone上是有效的!所以,请问一个更详细的问题。
  $(document).ready(function()
  {
    $('#loginForm').submit(function()
    {
      var username = $('#usernameInput').val();
      var password = $('#passwordInput').val();

      $.ajax(
        {
          'password' : password,
          'username' : username,
          'url'      : 'http://www.website.com/basic-auth-file.php',
          'type'     : 'GET',
          'success'  : function(){ window.location = 'http://www.website.com/basic-auth-file.php'; },
          'error'    : function(){ alert('Bad Login Details');},
        }
      );

      return false;
    });
  });