Перекрестный домен PHP Sessions

Я reccomend SVN для начинаний с, бит, легче приобрести навык, чем некоторые другие.

Черепаха является хорошим началом. Это просто установить и интегрируется с оболочкой окон, означая, что все довольно интуитивно при Щелчках правой кнопкой по папкам / файлы и т.д. Довольно хороший документ также.

Вам также будет нужен сервер SVN / хост connet к... Я могу reccomend Assembla, который свободен зарегистрироваться в и дает Вам сервер SVN для игры с.

6
задан 27 August 2009 в 10:24
поделиться

3 ответа

По умолчанию нельзя установить файлы cookie для нескольких доменов. Я считаю, что вы можете настроить файл (ы) P3P, чтобы включить его. http://p3ptoolbox.org/guide/section4.shtml#IVd Я сам этого не делал, поэтому не знаю, в какой части браузеров это реализовано и работает ли это вообще.

Похоже, Virb просто использует JavaScript. У него есть библиотека AJAX, которая отправляет запрос JSON-P серверу virb, если не установлен файл cookie сеанса. (первая загрузка Firefox вы можете увидеть это в Firebug). Ответ JSON просто сообщает странице, вошел ли пользователь в систему или нет, и обновляет части страницы, которые должны отражать статус пользователя.

Итак, на странице встраивается JS с сайта virb.com. Поскольку это домен virb.com, на сервер отправляются файлы cookie, настроенные на virb.com. Затем сервер отправляет результат файла cookie внешнему сайту.

В случае virb, который не будет работать должным образом без JS, я думаю, что это хороший вариант. Однако, вы можете сделать то же самое с HTTP Redirects.

Если HTTP-хост не является основным доменом (example.com):

if (!$_COOKIE['sessionid'] && $_SERVER['HTTP_HOST'] != 'example.com') {
// redirect to your main site
header('Location: http://example.com');
}

На основном сайте установите cookie и отправьте пользователя обратно во внешний домен (domain.com), передав идентификатор сеанса в Место расположения.

header('Location: http://domain.com.com?sessid='.urlencode($_COOKIE['sessionid']));

Последний бит - это перенаправление обратно на страницу, на которой вы были сейчас, когда у вас есть тот же сеанс.

setCookie(...); // sessid in $_GET['sessid']
header('Location: http://domain.com/'); 

Обратите внимание, что на самом деле вы можете отправить страницу, на которой вы сейчас находитесь, обратно на example.com в первом step, чтобы вы могли вернуться к нему позже.

Поскольку вы используете только заголовки (выводить содержимое не нужно) и в большинстве случаев HTTP / 1.1, поэтому вы будете использовать один и тот же TCP-сокет, я думаю, что это довольно эффективно и будет поддерживаться больше, чем JavaScript. вариант.

Изменить: не забудьте установить cookie, когда вернетесь во внешний домен.

Последний шаг является необязательным, но он предотвращает попадание сессид в URL. Это больше проблема безопасности, чем сохранение ее в заголовках HTTP.

5
ответ дан 10 December 2019 в 00:41
поделиться

Единственный способ - добавить идентификаторы сеанса к URL-адресам, которые переходят из одного домена в другой (или добавить этот идентификатор сеанса к URL-адресу iframe src), а затем закодировать свой сеанс серверная часть хранилища, чтобы справиться с этим.

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

4
ответ дан 10 December 2019 в 00:41
поделиться

Если ваш метод должен называться ToString , вам нужно будет получить класс из List . Вы можете сделать его универсальным:

static class MyList<T> : List<T>
{
    public override string ToString()
    {
        // ...
    }
}

В этом случае вам нужно будет использовать MyList вместо List во всем приложении, если вы хотите иметь собственное преобразование.

Однако, если вы можете выбрать другое имя для своего метода, вы можете использовать методы расширения и добиться того же эффекта, Это что-то вроде того, что другой домен вызывает что-то вроде www.userprofiles.com/profile.php?userid=1 и отображает результаты? В этом случае profile.php будет генерировать новый идентификатор сеанса при каждом вызове. Вам нужно установить разные идентификаторы для каждого внешнего домена, использующего ваш сайт, и изменить profile.php на что-то вроде:

if (isset ($ _ REQUEST ['sid'])) session_id ($ _ REQUEST ['sid']);

session_start ();

и вызовите сценарий следующим образом www.userprofiles.com/profile.php?userid=1&sid=somesessionid1234

0
ответ дан 10 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: