PHP+SHTML, серверное включение результата работы PHP и сессии

Jeen

Guest
PHP+SHTML, серверное включение результата работы PHP и сессии

Посоветуйте, как получить доступ к данным сессии ($_SESSION) в скрипте, который вызывается после заголовка (<HEAD>...</HEAD>).

Задача:

1. В SHTML файле используются несколько SSI <!--#include... аргументами которых указываются различные PHP-скрипты. То есть результат исполнения этих скриптов хотелось бы видеть в нужном месте SHTML-файла.

2. Скрипты должны иметь доступ к данным сессии.

Проблема:

Вызов функции start_session() должен быть сделан перед отправкой заголовков HTML (<HEAD>...</HEAD>), но вызовы скриптов расположены по всему SHTML документу. А без вызова start_session() скрипты не видят данных сессии.
 

Сергей123

Новичок
>> Вызов функции ... должен быть сделан перед отправкой заголовков
выполни это требование
 

DimbIch

Новичок
значит сделай ОДИН скрипт и вызови его в самом начале
в скрипте будет
<?php
session_start();
?>
 

bgm

&nbsp;
Тут явное недоразумение:
если идёт последовательное использование SSI include даже после отправки заголовков предыдущими скриптами, то в последующих скриптах ничто не помешает использовать session_start(). Только пользы от этого никакой :)
Следующая штука выполняется без всяких ошибок (особенно полезно обратить внимание на содержимое $_SERVER):
PHP:
***index.shtm***
<!--#include virtual="t1.php" --><html><head></head><body>
<!--#include virtual="t2.php" --></body></html>

***t1.php идентичный t2.php***
<?php session_start(); echo "test<pre>"; print_r($_SERVER); ?>
 

Jeen

Guest
Автор оригинала: bgm
Тут явное недоразумение:
если идёт последовательное использование SSI include даже после отправки заголовков предыдущими скриптами, то в последующих скриптах ничто не помешает использовать session_start(). Только пользы от этого никакой :)
Следующая штука выполняется без всяких ошибок (особенно полезно обратить внимание на содержимое $_SERVER):
PHP:
***index.shtm***
<!--#include virtual="t1.php" --><html><head></head><body>
<!--#include virtual="t2.php" --></body></html>

***t1.php идентичный t2.php***
<?php session_start(); echo "test<pre>"; print_r($_SERVER); ?>
Действительно работает. А вчера не работало, выдавало ошибку, что не получается выслать кук сессии и еще чего-то. Щас уже и не повторю. Ладно, всяко случается...

Только проблему это не решает. Попробуйте это:

t1.php
PHP:
<?php session_start(); echo $_SESSION['sid'] = SID; ?>
t2.php
PHP:
<?php session_start(); echo SID; echo $_SESSION['sid']; ?>
index.shtml оставляем без изменений.

В результате на выводе получаем разные SID-ы, скрипт не видит содержимого $_SESSION, точнее видит пустой массив, то есть получаются 2 разных сессии.

Вообще-то, текущую проблему я решил, так как помимо сессий в моем конкретном случае можно было использовать более ресурсоемкий вариант, я его сейчас и использую.

Но проблема просмотра данных сессии в PHP-скрипте, вызываемом SSI-инструкциями осталась актуальной.
 

bgm

&nbsp;
Я не знаю тонкостей использования SSI include,
но вот судя по тому, что если в последовательности t*.php посмотреть результаты функции headers_sent, которые будут нулевыми, то скрипты вызываются независимо друг от друга и ничего знать друг о друге не могут. Как-то путанно получилось (надо вникать, но времени и желания нет:) )
 

Фанат

oncle terrible
Команда форума
bgm
Скрипты вызываются СЕРВЕРОМ. В этом вся загвоздка.
так что проблема в поставленной формулировке неразрешима.
 
Сверху