Работа с $_SESSION в стороннем скрипте

Главные вкладки

Аватар пользователя alkis27 alkis27 28 марта 2010 в 7:33

Здравствуйте.

Имеется 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?

Комментарии

Аватар пользователя olk olk 28 марта 2010 в 13:16

Дело в том, что во втором случае, скрипт выполняется вне контекста Друпал.
Вставьте в ваш скрипт строки:

<?php
include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);?>

при этом путь до bootstrap.inc должен быть корректен (относительно вашего скрипта)

Аватар пользователя casey2000 casey2000 12 февраля 2012 в 22:18

olk wrote:
Дело в том, что во втором случае, скрипт выполняется вне контекста Друпал.
Вставьте в ваш скрипт строки:

<?php
include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);?>

при этом путь до bootstrap.inc должен быть корректен (относительно вашего скрипта)

О боги! Спасибо вам огромное, я 10 часов пытаюсь понять в чем проблема!
Все работает. К bootstrap.inc нужно указывать абсолютный путь.

Аватар пользователя alkis27 alkis27 28 марта 2010 в 15:39

Пишу:
<?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')

Аватар пользователя olk olk 28 марта 2010 в 20:53

Попробуйте первой строчкой
chdir("C:\Program Files\Environment\www");
, потому что черт знает где ваш скрипт расположен,
а bootstarp предполагает, что его загружают из doc_root,
ну или перенесите ваш скрипт в корень

Аватар пользователя alkis27 alkis27 30 марта 2010 в 3:04

"olk" wrote:
Попробуйте первой строчкой
chdir("C:\Program Files\Environment\www");

Спасибо! На время загрузки друпала меняю рабочую директорию - ошибок нет.

Но основная проблема осталась. Значения, которые записываются в сессию в данном скрипте, если он выполняется отдельно, не сохраняются. Получается что drupal_bootstrap - не помогает. Попробовал и с параметром DRUPAL_BOOTSTRAP_FULL и с DRUPAL_BOOTSTRAP_SESSION.

Аватар пользователя FoxyClub FoxyClub 16 апреля 2010 в 10:05

Привет,

столкнулся с точно такой же проблемой (при вызове внешнего CAPTCHA скрипта )

Заработало после того, как в settings.php прописал имя своего сайта в параметре $base_url (по умолчанию он закомментирован)
$base_url = 'http://my_site.ru'

Скорее всего Drupal генерит ID сессии по разному для "своих" скриптов и внешних, учитывая имя сайта, при указании $base_url ID сессий совпадают

Аватар пользователя alkis27 alkis27 6 мая 2010 в 3:13

Спасибо!
Проблема действительно решена.

Еще я заметил следующее: при переносе сайта с локальной машины на сервер - в базе данных mysql в таблице пользователей - пропадал пользователь с идентификатором 0, а это является необходимым условием для нормальной работы сессий для не авторизованных пользователей.

Аватар пользователя orbisnull@drupal.org orbisnull@drupal.org 6 мая 2010 в 8:30

alkis27 wrote:

Еще я заметил следующее: при переносе сайта с локальной машины на сервер - в базе данных mysql в таблице пользователей - пропадал пользователь с идентификатором 0, а это является необходимым условием для нормальной работы сессий для не авторизованных пользователей.

Базу сохраняете с использованием mysqldump? Если нет, то зря, mysqldump - наиболее надежный и универсальный способ.

Аватар пользователя alkis27 alkis27 19 мая 2010 в 14:57

"<a href="mailto:orbisnull@drupal.org">orbisnull@drupal.org</a>" wrote:
Базу сохраняете с использованием mysqldump? Если нет, то зря, mysqldump - наиболее надежный и универсальный способ.

Нет. Про mysqldump впервые слышу, а с mysql/php и drupal я только знакомлюсь.
Большое спасибо за подсказку - в следующий раз попробую mysqldump.

Аватар пользователя norx norx 16 сентября 2010 в 20:11

Создал юзера с uid=0 в таблице users и сессии для не авторизированного пользователя заработали. СПАСИБО!!!!!!!!

Аватар пользователя потерянный потерянный 27 января 2013 в 18:31

"FoxyClub" wrote:
Заработало после того, как в settings.php прописал имя своего сайта в параметре $base_url (по умолчанию он закомментирован)
$base_url = 'http://my_site.ru'

+100500 к твоей карме!!!
я все выходные искал этот ответ!!!