Цель:
1. Единая база пользователей для нескольких сайтов (все сайты используют одну базу данных, префиксы разные)
2. Авторизовавшись на одном сайте, нужно быть автоматически авторизованным на всех остальных.
3. Отправив сообщение пользователю на первом сайте, дать ему возможность прочитать его на любом другом
Решение
1. хак файла \core\classes\db.class.php. -> Единая база пользователей
Для этого не обязательно, чтобы сайты были поддоменами - важна лишь единая база данных
2. хак файла \core\cms.php -> Единые куки для всех сайтов.
А вот для этого сайты обязательно должны быть поддоменами одного домена + сам основной домен.
Код
1. db.class.php
Добавить в блок объявлений переменных строку
public $users_prefix = 'my';
где "my" - это ваш префикс таблиц, в которых хранятся пользователи. Например, префикс БД для основного домена.
в метод
public function query($sql, $ignore_errors=false, $replace_prefix = true){
добавить после
$sql = $replace_prefix ? $this->replacePrefix($sql) : $sql;
строки
$prefix = cmsConfig::getConfig('db_prefix'); if ($this->users_prefix !== $prefix) { $sql = trim(str_replace($prefix.'_user',$this->users_prefix.'_user',$sql)); }
После этого все сайты будут обращаться к единой базе пользователей.
2. cms.php
в блок объявления переменных добавить строку
private static $maindomain = '.site.ru';
где site.ru - это ваш основной домен. Это нужно для единых кукисов.
заменить метод
public static function setCookie($name, $value, $time){ setcookie('InstantCMS['.$name.']', $value, $time, '/', null, false, true); }
на
public static function setCookie($name, $value, $time){ setcookie('InstantCMS['.$name.']', $value, $time, '/', self::$maindomain, false, true); }
заменить
public static function unsetCookie($name){ setcookie('InstantCMS['.$name.']', '', time()-3600, '/'); }
на
public static function unsetCookie($name){ setcookie('InstantCMS['.$name.']', '', time()-3600, '/',self::$maindomain); }
Перед заменой - обязательно сделать копии своих файлов.
Скачать:
Теги: единая,база,пользователей,для,instantcms,скачать