Как мне сделать форму, которая может войти в два места одновременно? - PullRequest
1 голос
/ 28 июля 2011

Как мне сделать форму, которая может войти в два места одновременно?

http://img577.imageshack.us/img577/3127/calendarlogin.jpg http://img94.imageshack.us/img94/1567/joomlalogin.jpg

Эти две формы входа предназначены для календаря и сайта joomla.Они работают отдельно.Они находятся в одном каталоге public_html.Формы входа в систему представлены в двух отдельных файлах index.php.Мне бы хотелось, чтобы я мог заставить пользователя войти в оба аккаунта, отправив один раз в форму.Как мне это сделать.Я подумываю об использовании промежуточного php-файла, который ссылается на два в форме, но я не могу понять, как это сделать.

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

править: ух, я подумал, что может быть простое решение.Я пытался изменить функции входа в систему.Не совсем сработало.Идея интеграции календаря с Joomla кажется немного сложной.Это был бы лучший способ работать с такими вещами, как время ожидания сессии.

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

edit: проблема в том, что я не хочу, чтобы людинеобходимо войти в систему дважды, чтобы получить доступ к обеим областям сайта.

1 Ответ

2 голосов
/ 28 июля 2011

Я бы избегал этого, но ради академического упражнения это ответ.

<?php
$logged_in = false;
$site1_url = 'http://google.com';
$site2_url = 'http://redis.io';

if(array_key_exists('username', $_POST)
        and array_key_exists('password', $_POST)) {

    // Assume the text input fields are named the same in all three forms
    $fields = array(
        'username' => $_POST['username'],
        'password' => $_POST['password'],
    );

    // Access the first site
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $site1_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    $output1 = curl_exec($ch);
    curl_close($ch);

    // Access the second site
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $site2_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    $output2 = curl_exec($ch);
    curl_close($ch);

    if(strpos($output1, 'Logged In') and
            strpos($output2, 'Signed In')) {
        // set logged_in to true only when the appropriate strings are found
        // in the pages we have just posted onto so that we know that the logins
        // were actually successful.
        $logged_in = true;
    }
}
if(false === $logged_in):
    ?>
    <form action="" method="post">
        <label for="username">Username</label>
        <input type="text" name="username" id="username" value="" />

        <label for="password">Password</label>
        <input type="password" name="password" id="password" />

        <input type="submit" />
    </form>
<?php else: ?>
    <p>You are now logged into the website.</p>
    <p>To access the sites try:</p>
    <ul>
        <li><a href="<?php htmlentities($site1_url); ?>"><?php htmlentities($site1_url); ?></a>
        <li><a href="<?php htmlentities($site2_url); ?>"><?php htmlentities($site2_url); ?></a>
    </ul>
<?php endif; ?>
...