Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javascript调用php函数,或者如果可以';I don’我不能做,我应该做些什么_Php_Jquery_Ajax - Fatal编程技术网

如何从javascript调用php函数,或者如果可以';I don’我不能做,我应该做些什么

如何从javascript调用php函数,或者如果可以';I don’我不能做,我应该做些什么,php,jquery,ajax,Php,Jquery,Ajax,我创建了一个jquery对话框,用于登录我的网站: $('#login').dialog({ modal: true, position: 'center', autoOpen: false, title: 'Login', height: '750px', width: '300px', zIndex: 9999, closeOnEscape: false, buttons: { 'Login': function() { $(this)

我创建了一个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尝试登录。

更新:通过SSL连接实现真正的安全性

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

  • 单击登录
  • 从对话框中获取用户名/密码
  • $.post()
    将其添加到包含登录代码的
    /login.php
    文件中
  • 用PHP处理这个请求
  • 如果登录成功,则输出一件事;如果登录失败,则输出另一件事
  • $的回调函数中接收此输出。post
  • 调用
    window.location='/nextpage.php'
    或显示错误消息
  • 根据,您有4个
    $参数。post

    $.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;
    }
    
    @gahooa:

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

    这里有一组很棒的JavaScript,可以在通过网络发送信息之前对信息进行加密

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

    然后您只需在(gahooa的代码)中添加一个函数:

    <>这不是你能做的最安全的,因为你可以考虑做一个盐,你在哪里做:< /P>
    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($\u POST['signup\u password'])。$salt)


    用户注册时的密码(并转换所有现有密码)

    多好的答案啊!:)这说明了一切,删除了我的。我应该在12月31日的截止日期前写我的代码,而不是写这么多问题,但是。。。哈哈。非常好的信息@gahooa,谢谢。您能否详细说明一下在jquery中设置
    u
    p
    的过程?特别是将
    $\u POST
    值从PHP传递到javascript的过程。谢谢在javascript中,当我调用hex_md5(密码)时,它失败了。并且不做POST请求。你知道为什么吗?你必须从我给你的URL下载md5纸条,把它放在你的网站上,并在你的页面上加入脚本
    ,你实际上是在把密码变成一个32字符的字符串。拦截(在开放网络上)并随时以用户身份登录是很简单的。这就是SSL设计用来解决的问题。是的,SSL是加密数据的一个很好的解决方案,但是为什么不同时使用消息摘要呢?我散列密码的原因是为了避免攻击者在不同站点上重复使用相同的凭据。例如,如果我对您的站点进行身份验证,并且它在传输密码之前对密码进行哈希运算,请通过以下命令告诉我明文密码:
    2eb60122b172ade05b997a68274236f3
    。我甚至会给你alg命令:md5('$@.@^-^$'+md5(密码))。当你破解它时,把它贴在这里,:D
    <?php
    
        $salt = '$@.@^-^$'; // same as on client-side
    
        function authenticate( $user, $pass ){
           ...
           if( md5( md5( $storedPassword ) . $salt ) == $_POST['username'] ){ ... }
           ...
        }
    
    ?>