|
|
|
| Решил использовать вариант с редактированием в новом окне, но проблема в том, что сессионные данные в нем не видны.
в начале пишу @session_start, потом трассировщик содержимого переменных сеанса, все пусто, кроме GET параметров. А куда делись сессионные ?
Без новых окон все чудно работает. Путь auto_save в php.ini указан, здесь было обсуждение подобного вопроса. В чем дело ? | |
|
|
|
|
|
|
|
для: larush
(21.10.2005 в 17:22)
| | >в начале пишу @session_start,
А не надо алеф (@) ставить - вы так не заметите сбой в отправке заголовков. Уберите его - что-нибудь выводится в окно браузера? | |
|
|
|
|
|
|
|
для: larush
(21.10.2005 в 17:22)
| |
c:/temp/ - ** результат [echo session_save_path();]
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\www\localhost\blocks\si\siOut.php:2) in C:\www\localhost\blocks\si\siOut.php on line 3
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\www\localhost\blocks\si\siOut.php:2) in C:\www\localhost\blocks\si\siOut.php on line 3
-- НАЧАЛО ПЕРЕМЕННЫХ GET --
{ siNum = 2 } -- [**это я GETом передал для проверки]
-- НАЧАЛО ПЕРЕМЕННЫХ POST --
--
-- НАЧАЛО ПЕРЕМЕННЫХ СЕАНСА --
--
-- НАЧАЛО ПЕРЕМЕННЫХ COOKIE-НАБОРА --
--
|
| |
|
|
|
|
|
|
|
для: larush
(22.10.2005 в 18:16)
| | нельзя ничего выводить перед session_start в браузер. | |
|
|
|
|
|
|
|
для: larush
(22.10.2005 в 18:16)
| | Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/group/id_group=12 | |
|
|
|
|
|
|
|
для: cheops
(22.10.2005 в 21:48)
| | спасибо, буду учитывать. Но помогите тогда разобраться структурно :
сессия заводится на сеанс, во время которго я открываю новое окно. Почему при открытии нового окна может теряться ссылка на сессию ? Кстати, сегодня обнаружил то же самое и с функцией. Т.е. - перед вызовом функции вывожы некие параметры сесси - успешно, внутри вызываемой функции парметры пусты.. Где глобальная ошибка ? | |
|
|
|
|
|
|
|
для: larush
(14.11.2005 в 15:54)
| | 1) Как выглядит код нового окна?
2) Cookie в браузере включены? | |
|
|
|
|
|
|
|
для: cheops
(14.11.2005 в 17:12)
| | К сожалению на данный момент времени, я снес тот вариант, перешел на иной. Но было что-то вроде
<a href= "...." target=_blank>
Куки включены
Сейчас у меня иной вопрос, открываю по нему новую тему | |
|
|
|
|
|
|
|
для: larush
(21.10.2005 в 17:22)
| | Проблема заключается в следующем.
Сессия доступна только из того окна броузера, в котором она была создана (если не пользоваться фреймами), а ссылка с Target=_Blank открывает НОВОЕ окно броузера, в котором session_start создает ПУСТУЮ сессию. Это равносильно тому, как если бы заново запустили броузер на этом же или другом компьютере. Понятно, что никакой инфомации из сессии, открытой в первом окне, получить невозможно.
Кстати, несмотря на обилие напущенного в книжках тумана, сессия - это всего-навсего простой текстовый файл, содержащий единственную строку с сериализованными в нее переменными. Причем этому файлу можно имя и каталог для хранения свои указывать.
(Плюс куки броузера, но они нужны только для автоматического поиска этого файла.)
Поэтому, в принципе, из нового окна можно получить информацию о переменных из сессии другого открытого окна, если передать ему имя и путь файла нужной сессии. А потом его отрыть и сделать unserialize(). | |
|
|
|
|
|
|
|
для: human
(15.11.2005 в 10:05)
| | хорошо, понял. А как быть с таким вариантом. Есть накрученный движок (всего там понапихано, уж и не чувствую я его). Пишу вывод на экран некоторых данных сессии - нормально, далее идет вызов функции из этого же файла, и в ней уже данных сессии нету :-(.. Куда они деваются ?
echo '1=' .$HTTP_SESSION_VARS['Appl_id']
.' 1=' .$HTTP_SESSION_VARS['user_group']
.' 1=' .$HTTP_SESSION_VARS['user_id'];
while($posts = @mysql_fetch_array($result))
echo " <TABLE BORDER=1 ...>";
put_replys(....);
$i++;
echo '</td></tr></TABLE><br>';
}
//*******************************************************************
function put_replys($date, $msg, $email, $name, $post_id, $user_id)
{
echo '2=' .$HTTP_SESSION_VARS['Appl_id']
.' 2=' .$HTTP_SESSION_VARS['user_group']
.' 2=' .$HTTP_SESSION_VARS['user_id'];
|
так вот значения сессии "1=" на экране есть, а "2=" нет. | |
|
|
|
|
|
|
|
для: larush
(15.11.2005 в 10:28)
| | А является ли массив $HTTP_SESSION_VARS суперглобальным? | |
|
|
|
|
|
|
|
для: larush
(15.11.2005 в 10:28)
| | Вот работающий синтаксис.
Нужно или пользоваться массивом _SESSION или в функции объявлять глобальнымHTTP_SESSION_VARS
$_SESSION['a'] = 1;
$_SESSION['b'] = 2;
$_SESSION['c'] = 3;
$a = $_SESSION['a'];
$b = $_SESSION['b'];
$c = $_SESSION['c'];
echo "1) $a $b $c <br>";
echo '2)' .$HTTP_SESSION_VARS['a']
.' 2)' .$HTTP_SESSION_VARS['b']
.' 2)' .$HTTP_SESSION_VARS['c']
.'<br />';
TestSession();
function TestSession()
{ global $HTTP_SESSION_VARS;
$a = $_SESSION['a'];
$b = $_SESSION['b'];
$c = $_SESSION['c'];
echo "3) $a $b $c <br>";
echo '4)' .$HTTP_SESSION_VARS['a']
.' 4)' .$HTTP_SESSION_VARS['b']
.' 4)' .$HTTP_SESSION_VARS['c']
.'<br />';
}
|
| |
|
|
|
|
|
|
|
для: human
(15.11.2005 в 13:03)
| | Во дела !!! Спасибо, Хуману !!!!
А в чем принципиальное отличие между $_SESSION и $HTTP_SESSION_VAR ? Я читал, что это просто варианты синтаксиса разных версий. | |
|
|
|
|
|
|
|
для: larush
(15.11.2005 в 15:30)
| | Это одно и тоже, но рекомендуется использовать $_SESSION, так как $HTTP_SESSION_VAR будет отменён в PHP 6 и уже сейчас отключается по умолчанию. | |
|
|
|
|
|
|
|
для: larush
(15.11.2005 в 15:30)
| | Это не совсем одно и то же.
Разница в том, что массив $_SESSION является суперглобальным или автоматически глобальным, а массив $HTTP_SESSION_VAR в функциях нужно объявлять глобальным директивой global.
Фактически это текстовый файл, содержащий строку с сериализованными переменными.
При любом добавлении переменных в этот массив автоматически производится модификация файла. А строка автоматически читается из файла и десериализуется в ассоциативный массив. с именем $_SESSION .
Добавлю еще, что для повышения безопасности register_globals обычно отключают, поэтому нужно самостоятельно извлекать переменные из этого массива, т.е. делать
| |
|
|
|
|
|
|
|
для: human
(15.11.2005 в 10:05)
| | В надставках на браузеры типа MyIE или Maxton, новые окна содержат сессии. Для разработчиков конечно не паноцея, а вот для пользователей удобно, особенно если любишь открывать страницы в новых окнах. | |
|
|
|