Включая внешние php файлы и используя функции из них? - PullRequest
0 голосов
/ 12 сентября 2011

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

Поток событий: Пользователь вводит лицензионный ключ на своем сайте -> Лицензионный ключ, отправленный в файл /validate.php, который включает файл с моего сервера -> Сервер проверяет, включен ли лицензионный ключ в база данных -> Если да, устанавливает сеанс в домене пользователя и перенаправляет в раздел администратора -> Если нет, перенаправляет обратно на страницу входа с сообщением об ошибке.

Вот мой код (теоретический - могут быть проблемы):

validate.php

include("http://www.example.com/function.php");
validate($_POST['license']);

function.php

include("db_conn.php");

function validate($license)(
$conn = mysql_connect($db_host, $db_user, $db_pass); mysql_select_db($db_name);

$license = mysql_real_escape_string($license);

$query = "SELECT FROM licenses WHERE license = '$license'";
$result = mysql_query($query);

if(mysql_num_rows($result) == 1) {
    mysql_close($conn);
    session_set_cookie_params(60*60*24*30,"/","." . $_SERVER['SERVER_NAME']);
    session_start();
    $_SESSION['license_valid'] == "YES";
    header("Location:" . $_SERVER['SERVER_NAME'] . "/admin");
} else {
    mysql_close($conn);
    header("Location" . $_SERVER['SERVER_NAME'] . "/login/?error=1");
}
);

Проблема в том, что я не уверен, как сервер будет обрабатывать функцию validate(). Например, будет ли сеанс установлен на моем сервере или на сервере пользователя? Будет ли он использовать мой $_SERVER['SERVER_NAME'] или пользователя? Будет ли он включать db_conn.php с моего сервера или пользователя?

1 Ответ

1 голос
/ 12 сентября 2011

Ваш прогнозируемый поток:
Пользователь вводит лицензионный ключ на своем сайте (происходит на его сервере)
Лицензионный ключ размещен в файле /validate.php ... (происходит на его сервере)
... который включает в себя файл с моего сервера (который не работает)

Ваш фактический поток будет:
Пользователь вводит лицензионный ключ на своем сайте (происходит на его сервере)
Лицензионный ключ размещен в файле yoursite.com/validate.php ... (происходит на его сервере)
... который запускает скрипт на вашем сервере.

Ваш сервер проверяет, включен ли лицензионный ключ в базу данных.

Если да, устанавливает сеанс на вашем сервере для этого пользователя и перенаправляет в раздел администратора на вашем сервере.
Если нет, перенаправляет на страницу входа на вашем сервере с сообщением об ошибке.


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

validate.php (на вашем сервере)

<?php
session_start();

$key = $_POST['license_key'];
// Please clean this variable, obvious SQL injection, blah blah

include('function.php'); // From your server, contains the validate() function
if (validate($key))
{
    // Log them in on your server
    $_SESSION['license_key'] = $key;
}
else
{
    // Say error and show the login form from your server
}

Теперь кто-то на другом сервере может установить action на своих <form> на http://yourserver.com/validate.php, и ваш сервер оттуда заменится.


Когда вы включаете скрипт, все переменные в включенном скрипте будут работать так, как если бы они были встроенными, внутри , включая script.

По сути, просто представьте, что весь этот код находится внутри validate.php, и он будет работать так, как если бы он был.

Здесь нужно обратить внимание - если function.php находится в другом каталоге, чем validate.php, include внутри validate.php, который запрашивает db_conn.php, не будет выполнен - ​​вам нужно изменить эта страница соответствует пути из , включая файл .

...