[英]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
。
$.post()
到包含登錄代碼的/login.php
文件中 $.post
的回調函數中接收此輸出 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.