Как вызвать функцию PHP из JavaScript или, если это не может быть сделано, какое-то направление на то, что я должен сделать - PullRequest
0 голосов
/ 20 декабря 2009

Я создал модальное диалоговое окно 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-функцию, когда они нажимают кнопку Login? Если нет, то как я могу получить окно входа в это диалоговое окно, чтобы использовать php для попытки входа в систему.

Ответы [ 2 ]

7 голосов
/ 20 декабря 2009

Обновление: сделать это через соединение SSL для истинной безопасности

Вам просто нужно сделать закулисный запрос, используя AJAX. Например, $.post в jQuery.

  1. Нажмите Войти
  2. Получить имя пользователя / пароль из диалога.
  3. $.post() это файл /login.php, содержащий код для входа в систему
  4. Обработать этот запрос в PHP.
  5. Вывести одну вещь, если вход в систему успешен, или другую, если она не прошла.
  6. Получите этот вывод в функции обратного вызова $.post
  7. Либо позвоните window.location = '/nextpage.php', либо отобразите сообщение об ошибке.

Согласно http://docs.jquery.com/Ajax/jQuery.post, у вас есть 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;
}
0 голосов
/ 21 декабря 2009

@ gahooa:

это отличный ответ! тем не менее, вы определенно захотите использовать дайджест сообщения для этого пароля (желательно с некоторыми отступами), чтобы люди не могли видеть свое имя пользователя / пароль открытым текстом.

http://pajhome.org.uk/crypt/md5/scripts.html Вот большой набор JavaScript, который зашифрует информацию перед отправкой по сети.

По сути, концепция заключается в том, что вы можете хранить пароль пользователя в этом зашифрованном формате (что также является хорошей идеей) или динамически вычислять его, если хотите, но после того, как оба они были переварены, они должны совпадать.

И тогда вы добавите только 1 функцию (код gahooa):

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

паролей пользователей при регистрации (и преобразовании всех существующих)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...