Апачевый mod_proxy?
На самом деле родная сессия PHP основывается на тех же самых cookies: у клиента в cookie хранится идентификатор сессии. А вся информация, связанная с ID, лежит на сервере. PHP позволяет задавать параметры установки "печенюшки" через функцию session_set_cookie_param. Там указан список аргументов, которые управляют ими. Среди них есть и домен ;) :
$domain = '.mydomain.com'; session_set_cookie_params(7200, '/', $domain); session_start();
На всякий случай поясню, что 7200 - это количество времени в секундах, после которого Cookie считается протухшей, а '/' - путь, для которого она будет действовать. С доменом всё понятно, надеюсь :).
КиллерМЕН:PHP предоставляет возможность переопределить обработчики сессии с помощью функции session_set_save_handler. Там же есть пример, который, впрочем, реализует ту же схему, что работает по дефолту. Но в комментариях есть и готовые решения по хранению сессий в базе. Например, вот этот.
Рискну предположить, что событие onunload в документе, который откроется в попапе, с задачей справится:
<html> <body onunload="window.opener.openedWindow = null; "> ... </body> </html>
convert_cyr_string не поможет. Не умеет он UTF-8... А вот комментарии с этой странички очень даже могут помочь. Особенно в том случае, если у Вас не установлено расширение iconv =)
Вообще, код с виду корректный, но есть два "но":
Первое, как уже сказали, непонятка с $_SERVER['DOCUMENT_ROOT']. Очень может быть, что по получившемуся пути просто нет файла. Попробуйте добавить в начало скрипта вот такие строки:
error_reporting(E_ALL);ini_set('display_errors', true);
и посмотреть, вывалилось какое-нибудь предупреждение о несуществующих файлах или нет. Если ошибки нет, то, возможно, ответ кроется в причине №2?
Второе: смущает открывающий тег <?: дело в том, что в зависимости от настроек (конкретнее - от директивы short_open_tags в php.ini) PHP может не считать тег <? началом обработки скрипта. Попробуйте записать открывающий тег PHP целиком: <?php (впрочем, на виртуальных хостингах обычно позволяют пользоваться краткой формой. Для совместимости).
Что-то вроде такого?
RewriteRule ^([a-z]+)/([\D]+)\.html$ /index.php?direct=$1&id=$2 [L]
А можно узнать, что говорит сервер? Если конкретно - записи из error.log