Общие сеансы PHP в домене
=========================

Я видел несколько ответов на это в SOF, но большинство из них связано с использованием субдоменов, из которых никто не работал у меня. Обычным является то, что использование `session.cookie_domain`, которое из моего понимания будет работать только с субдоменами.

Меня интересует решение, которое касается сделок с совершенно разными доменами (и включает в себя возможность субдоменов). К сожалению, крайние сроки проекта - это то, что они есть, время не на моей стороне, поэтому я перехожу к знаниям и опыту SOF.

В текущем кратком обзоре проекта можно войти на один сайт, который в настоящее время сохраняет только `user_id` в сеансе, а затем сможет получить это значение в другом домене в пределах той же среды сервера. Данные сеанса хранятся/извлекаются из базы данных, где `session id` является первичным ключом.

Я надеюсь найти "легкое" и "легкое" решение.

Система использует собственный шаблон проектирования Model View Controller, поэтому все запросы (включая разные домены) запускаются через один загрузочный файл script. Используя имя домена как переменную, это определяет, какой контекст будет отображаться для пользователя.

Один из вариантов, который действительно имел потенциал, - это использование скрытого изображения и использование тега alt для установки `user id`. Мои первые впечатления показывают, что это сразу кажется "слишком легким" (если возможно) и пронизанным недостатками безопасности. Disscuss?

Другим вариантом, который я рассмотрел, является использование IP и User Agent для аутентификации, но, опять же, я считаю, что это не будет надежным вариантом из-за общих сетей и изменения IP-адресов.

Мой третий вариант (и предпочтительный), который я рассматривал и пока не видел, обсуждается с помощью `htaccess`, чтобы обмануть пользователя, думая, что они находятся в другом домене, когда infact apache перенаправляется; что-то вроде

 `www.foo.com/index.php?domain=bar.com&controller=news/categoires/1`   

но отображается пользователю как
`www.bar.com/news/categories/1`

 `foo.com` представляет собой "основной домен сайта", который выполняется всеми запросами, и `bar.com` - это то, что пользователь считает, что он обращается к нему. Запрос контроллера диктует запрашиваемую страницу и просмотр. Возможно ли это?

Есть ли другие варианты? Плюсы/минусы?

Спасибо заранее!

 

В интересах кого-то, кто интересуется этой функциональностью, нет простого ответа, которого я боюсь. Google "Единый вход", и он вернется с технологией, а некоторые решения будут доступны.

Что касается использования htaccess для скрытия имени домена, это невозможно, поскольку оно может использоваться для вредоносных действий.

 (function(w, d, n, s, t) {
 w[n] = w[n] || [];
 w[n].push(function() {
 Ya.Context.AdvManager.render({
 blockId: "R-A-248011-3",
 renderTo: "yandex\_rtb\_R-A-248011-3",
 async: true
 });
 });
 t = d.getElementsByTagName("script")[0];
 s = d.createElement("script");
 s.src = "//an.yandex.ru/system/context.js";
 s.async = true;
 t.parentNode.insertBefore(s, t);
 })(this, this.document, "yandexContextAsyncCallbacks");

Теперь я успешно реализовал систему для выполнения моих требований.

 

Думали ли вы об использовании [session\_set\_save\_handler](http://www.php.net/manual/en/function.session-set-save-handler.php). Вы можете хранить свои сессии в базе данных и получать к ним доступ из любого домена.

 (function(w, d, n, s, t) {
 w[n] = w[n] || [];
 w[n].push(function() {
 Ya.Context.AdvManager.render({
 blockId: "R-A-248011-4",
 renderTo: "yandex\_rtb\_R-A-248011-4",
 async: true
 });
 });
 t = d.getElementsByTagName("script")[0];
 s = d.createElement("script");
 s.src = "//an.yandex.ru/system/context.js";
 s.async = true;
 t.parentNode.insertBefore(s, t);
 })(this, this.document, "yandexContextAsyncCallbacks");



* Определите основной сервер сеанса (я делаю это в сочетании с memcached)
* использовать Ajax/JSON (P) для запроса сеанса с этого сервера, это позволяет вам обмениваться сеансами по нескольким доменам
* Повторное использование этого сеанса