Единая точка входа для приложения PHP через Интернет и на рабочем столе - PullRequest
0 голосов
/ 11 апреля 2010

Я пытаюсь создать процесс входа в систему. Но кажется невозможным создать один процесс, который будет работать с настольным приложением и стандартным веб-сайтом.

Вместо этого у меня есть функция входа в систему Usermanagement.php (которая является классом, icyntk), но затем в другом файле php (api/login.php) у меня есть:

<?php
require_once '../usermanagement.php';
$m = new usermanage(); 
echo $m->login($_POST['username'], $_POST['password']);
?>

И тогда мне все еще нужно будет сделать еще один login.php, чтобы использовать его с формой входа на веб-сайте. Так или иначе, я не вижу, чтобы получить результат (эхо) скрипта api/login.php из файла index.php (хотя форма входа в систему содержит только HTML).

В любом случае, я могу упростить это, поэтому мне нужен только один login.php?

Ответы [ 3 ]

1 голос
/ 11 апреля 2010

Насколько я понимаю, вы хотите:

  1. веб-сайт / веб-приложение, имеющее логин
  2. настольное приложение (не на PHP!), Входящее в систему с использованием того же метода входа

Один из способов - экспортировать метод входа в систему с использованием одного и того же API-интерфейса как на вашем веб-сайте, так и в удаленном приложении, поэтому вы будете использовать JavaScript на стороне клиента для доступа к API оттуда (AJAX / JSON). Вы захотите использовать для этого какую-то инфраструктуру, такую ​​как jQuery для упрощения AJAX на стороне клиента (среди многих других применений) и, возможно, модуль JSON в PHP (для использования json_encode; имейте в виду, что модуль может быть недоступен в некоторых веб-пространствах, так что если это из-под контроля не используйте его). Конечно, вам не нужно использовать XML или JSON в ваших ответах API, но проще открыть API для других (включая настольных) приложений без необходимости вручную реализовывать множество функций синтаксического анализа для обработки ответа в ваших интерфейсных классах.

Имейте в виду, что ваш сайт / веб-приложение не будет работать без JavaScript, если вы сделаете это таким образом! В непубличных частях веб-сайта это нормально, как в случае веб-приложения, используемого известной группой пользователей, но вы не должны зависеть от сценариев на стороне клиента для открытых частей веб-сайта.

Еще одно решение для упрощения, которое заключается в использовании PHP-фреймворка, так что вы можете проще писать на стороне сервера. Это в основном позволит вам назначить кнопке серверную функцию, которая просто вызывает ваш метод входа и действует соответствующим образом, устанавливая перенаправление или заменяя некоторую панель или все, что вы хотите продолжить после входа в систему.

Конечно, вы можете сделать все это самостоятельно, но это, как правило, приведет либо к большому количеству грязного кода, либо к реализации вашей собственной инфраструктуры. Если вы хотите сделать это самостоятельно, начните с публикации формы в том же файле PHP вместо дополнительного login.php и добавьте скрытое поле, например:

<input type="hidden" name="action" value="login"></input>

В PHP отметьте $_POST['action']=='login' и вызовите метод входа в систему.

Редактировать: Хотя ваш веб-сайт будет работать с сеансом PHP или файлом cookie, вы можете отслеживать состояние входа с помощью собственного токена сеанса, который вы можете передать в настольное приложение, чтобы его можно было использовать для последовательные вызовы API, поэтому вам не нужно обрабатывать куки. Эти токены также должны быть привязаны к IP и, возможно, к другой «индивидуальной» информации клиента; в идеале эта информация должна быть зашифрована в токен или токен зашифрован (клиентская сторона не должна будет «расшифровывать» это, просто верните ее для аутентификации). Токены также должны быть отключены после бездействия.

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

1 голос
/ 11 апреля 2010

Поскольку данные из вашего настольного приложения вряд ли будут отправлены через массив $_POST, я бы сказал, нет. Веб-сайты и настольные приложения - это два совершенно разных типа приложений, и было бы нереалистично думать, что вы могли бы разделить большую часть внешнего кода между ними.

Я бы попытался абстрагировать как можно больше функциональных возможностей в базовые классы, а затем создать две отдельные реализации интерфейса, использующие ядро, каждая по-своему.

0 голосов
/ 11 апреля 2010

Я собираюсь стать действительно "лимбом" и выйти на чертовски огромную конечность и сказать, что это то, что вы пытаетесь сделать:

<?php
if(isset($_POST['username'])) {
    require_once '../usermanagement.php';
    $m = new usermanage(); 
    echo $m->login($_POST['username'], $_POST['password']);
}else{
    ?>Put your login form HTML here<?php
}

Таким образом, вам нужен только один файл login.php.

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