簡體   English   中英

如何從javascript調用php函數,或者如果無法完成,請問我該怎么做

[英]how to call a php function from javascript or if that can't be done, some direction on what I should do

我創建了一個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函數,當他們單擊“登錄”按鈕時,是否可以調用該php函數? 如果沒有,我如何獲得該對話框的“登錄”框以使用php嘗試登錄。

更新:通過SSL連接執行此操作以獲得真正的安全性

您只需要使用AJAX進行幕后請求即可。 例如,jQuery中的$.post

  1. 點擊登錄
  2. 從對話框獲取用戶名/密碼。
  3. $.post()到包含登錄代碼的/login.php文件中
  4. 用PHP處理此請求。
  5. 如果登錄成功,則輸出一件事,如果登錄失敗,則輸出另一件事。
  6. $.post的回調函數中接收此輸出
  7. 調用window.location = '/nextpage.php'或顯示錯誤消息。

按照http://docs.jquery.com/Ajax/jQuery.post ,您有$.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;
}

@gahooa:

這是一個很好的答案! 但是,您一定要在該密碼上使用消息摘要(最好帶有一些填充),以便人們看不到其用戶名/密碼明文。

http://pajhome.org.uk/crypt/md5/scripts.html這是一組很棒的JavaScript,可以在您通過網絡發送信息之前對信息進行加密。

基本上,您的想法是可以將用戶密碼存儲為這種加密格式(這也是一個好主意),也可以根據需要動態計算它們,但是在將它們都消化之后,它們應該匹配。

然后,您只需在(gahooa的代碼)中添加1個函數:

$.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 )

用戶注冊時的密碼(並轉換所有現有密碼)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM