Здравствуйте.
Имеется my_image.php, внутри которой в сессию записываются определенные данные.
Если делаем ноду в режиме php code и пишем там - include("my_image.php"); - все работает. Значения в сессию записываются, потом их можно прочитать.
Если делаем ноду и пишем там - <img src="my_image.php" /> - не работает. Т.е. потом (в следующем заходе на ноду, после того как уже было обращение к странице my_image.php) я не могу прочитать значения записанные в сессию в скрипте my_image.php.
Получается что данные записанные в сессию в стороннем срипте не сохраняются, если этот скрипт выполняется вне контекста друпала (не через index.php, а напрямую).
Нашел обсуждение подобной проблемы: http://www.drupal.ru/node/25822.
Там закончилось все фразой "значит, проблема в вашей установке друпала". Я использую версию 6.15, попробовал 6.16 - результат тот же.
Подскажите, как можно решить данную проблему? Может что-то надо добавить в my_image.php?
Комментарии
Дело в том, что во втором случае, скрипт выполняется вне контекста Друпал.
Вставьте в ваш скрипт строки:
<?php
include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);?>
при этом путь до bootstrap.inc должен быть корректен (относительно вашего скрипта)
О боги! Спасибо вам огромное, я 10 часов пытаюсь понять в чем проблема!
Все работает. К bootstrap.inc нужно указывать абсолютный путь.
Если работа нужна только с сессией то DRUPAL_BOOTSTRAP_FULL избыточен.
достаточно DRUPAL_BOOTSTRAP_SESSION
Пишу:
<?php
include_once('../../../../../includes/bootstrap.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);
?>
А мне в ответ:
Warning: require_once(./includes/cache.inc) [function.require-once]: failed to open stream: No such file or directory in C:\Program Files\Environment\www\includes\bootstrap.inc on line 1009
Fatal error: require_once() [function.require]: Failed opening required './includes/cache.inc' (include_path='c:\Program Files\Environment\www\includes') in C:\Program Files\Environment\www\includes\bootstrap.inc on line 1009
В php.ini прописал:
include_path = "c:\Program Files\Environment\www\includes"
Попробовал добавить в свой код, но не помогает:
include_once('../../../../../includes/cache.inc')
Попробуйте первой строчкой
chdir("C:\Program Files\Environment\www");
, потому что черт знает где ваш скрипт расположен,
а bootstarp предполагает, что его загружают из doc_root,
ну или перенесите ваш скрипт в корень
Спасибо! На время загрузки друпала меняю рабочую директорию - ошибок нет.
Но основная проблема осталась. Значения, которые записываются в сессию в данном скрипте, если он выполняется отдельно, не сохраняются. Получается что drupal_bootstrap - не помогает. Попробовал и с параметром DRUPAL_BOOTSTRAP_FULL и с DRUPAL_BOOTSTRAP_SESSION.
Добавил в свой скрипт conf_init(); - результат тот же = у друпала - своя сессия, у моего скрипта - своя.
Привет,
столкнулся с точно такой же проблемой (при вызове внешнего CAPTCHA скрипта
)
Заработало после того, как в settings.php прописал имя своего сайта в параметре $base_url (по умолчанию он закомментирован)
$base_url = 'http://my_site.ru'
Скорее всего Drupal генерит ID сессии по разному для "своих" скриптов и внешних, учитывая имя сайта, при указании $base_url ID сессий совпадают
Спасибо!
Проблема действительно решена.
Еще я заметил следующее: при переносе сайта с локальной машины на сервер - в базе данных mysql в таблице пользователей - пропадал пользователь с идентификатором 0, а это является необходимым условием для нормальной работы сессий для не авторизованных пользователей.
Базу сохраняете с использованием mysqldump? Если нет, то зря, mysqldump - наиболее надежный и универсальный способ.
Нет. Про mysqldump впервые слышу, а с mysql/php и drupal я только знакомлюсь.
Большое спасибо за подсказку - в следующий раз попробую mysqldump.
Создал юзера с uid=0 в таблице users и сессии для не авторизированного пользователя заработали. СПАСИБО!!!!!!!!
+100500 к твоей карме!!!
я все выходные искал этот ответ!!!