代码之家  ›  专栏  ›  技术社区  ›  adhanlon

如何从javascript调用php函数,或者如果无法调用php函数,请给出我应该做什么的指导

  •  0
  • adhanlon  · 技术社区  · 16 年前

    我创建了一个jquery对话框,用于登录我的网站:

    $('#login').dialog({
      modal: true,
      position: 'center',
      autoOpen: false,
      title: 'Login',
      height: '750px',
      width: '300px',
      zIndex: 9999,
      closeOnEscape: false,
      buttons: {
        'Login': function() {
          $(this).dialog('close');
          $('#mask').hide();
          Login();
        },
        'Cancel': function() {
          $(this).dialog('close');
          $('#mask').hide();
        }
      }
    });
    

    我在一个单独的php文件中创建了一个名为Login()的php函数,当他们单击Login按钮时,我是否可以调用该php函数?如果没有,我如何让该对话框的登录框使用php尝试登录。

    2 回复  |  直到 16 年前
        1
  •  7
  •   gahooa    16 年前

    更新:通过SSL连接执行此操作以实现真正的安全性

    您只需要使用AJAX发出一个幕后请求。例如 $.post

    1. 单击登录
    2. $.post() 把它送到 /login.php 包含登录代码的文件
    3. 如果登录成功,则输出一件事;如果登录失败,则输出另一件事。
    4. 美元邮政
    5. 要么打电话 window.location = '/nextpage.php' 或显示错误消息。

    根据 http://docs.jquery.com/Ajax/jQuery.post ,则有4个参数可供选择 美元邮政

    $.post( url, [data], [callback], [type] )
    

    以便

    function onLogin(data)
    {
        if(data['success'])
            window.location = 'nextpage.php';
        else
            alert(data['error']);
    }
    
    var u = get_username_from_form();
    var p = get_password_from_form();
    
    $.post(
       '/login.php', 
       {username: u, password: p}, 
       onLogin, 
       'json' 
    )
    

    login.php ,你会:

    <?php
    
    $username = (isset($_POST['username']) ? $_POST['username'] : '');
    $password = (isset($_POST['password']) ? $_POST['password'] : '');
    
    //Assuming you wrote the authenticate() function
    if(authenticate($username, password))
    {
       echo json_encode(array('success' => true));
       exit;
    }
    else
    {
       echo json_encode(array('success' => false, 'message' => 'Login Failed!'));
       exit;
    }
    
        2
  •  0
  •   Community Mohan Dere    6 年前

    @加胡阿:

    这是一个很好的答案!但是,您肯定希望在该密码上使用消息摘要(最好使用一些填充),这样人们就不会看到他们的用户名/密码明文。

    http://pajhome.org.uk/crypt/md5/scripts.html 这里有一组很棒的JavaScript,可以在通过网络发送信息之前对信息进行加密。

    基本上,这一概念是,您可以将用户的密码存储为这种加密格式(这也是一个非常好的主意),或者如果您愿意,可以动态计算它们,但在这两种格式都被消化后,它们应该匹配。

    $.post(
       '/login.php', 
       {username: u, password: hex_md5(p)}, // here
       onLogin, 
       'json' 
    );
    

    这不是

    var salt = '$@.@^-^$'; // any random value with $p3c14l ch@|2$ (special chars)
    
    $.post(
       '/login.php', 
       {username: u, password: hex_md5(hex_md5(p) + salt)}, // here
       onLogin, 
       'json' 
    );
    

    然后在服务器端身份验证函数中,比较

    <?php
    
        $salt = '$@.@^-^$'; // same as on client-side
    
        function authenticate( $user, $pass ){
           ...
           if( md5( md5( $storedPassword ) . $salt ) == $_POST['username'] ){ ... }
           ...
        }
    
    ?>
    

    md5( md5( $_POST['signup_password'] ) . $salt )

    推荐文章