Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сохранение сессии при "target= _blank"
 
 автор: larush   (21.10.2005 в 17:22)   письмо автору
 
 

Решил использовать вариант с редактированием в новом окне, но проблема в том, что сессионные данные в нем не видны.
в начале пишу @session_start, потом трассировщик содержимого переменных сеанса, все пусто, кроме GET параметров. А куда делись сессионные ?
Без новых окон все чудно работает. Путь auto_save в php.ini указан, здесь было обсуждение подобного вопроса. В чем дело ?

   
 
 автор: cheops   (22.10.2005 в 00:55)   письмо автору
 
   для: larush   (21.10.2005 в 17:22)
 

>в начале пишу @session_start,
А не надо алеф (@) ставить - вы так не заметите сбой в отправке заголовков. Уберите его - что-нибудь выводится в окно браузера?

   
 
 автор: larush   (22.10.2005 в 18:16)   письмо автору
 
   для: 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-НАБОРА --
--

   
 
 автор: Atom   (22.10.2005 в 20:08)   письмо автору
 
   для: larush   (22.10.2005 в 18:16)
 

нельзя ничего выводить перед session_start в браузер.

   
 
 автор: cheops   (22.10.2005 в 21:48)   письмо автору
 
   для: larush   (22.10.2005 в 18:16)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.

http://www.softtime.ru/group/id_group=12

   
 
 автор: larush   (14.11.2005 в 15:54)   письмо автору
 
   для: cheops   (22.10.2005 в 21:48)
 

спасибо, буду учитывать. Но помогите тогда разобраться структурно :
сессия заводится на сеанс, во время которго я открываю новое окно. Почему при открытии нового окна может теряться ссылка на сессию ? Кстати, сегодня обнаружил то же самое и с функцией. Т.е. - перед вызовом функции вывожы некие параметры сесси - успешно, внутри вызываемой функции парметры пусты.. Где глобальная ошибка ?

   
 
 автор: cheops   (14.11.2005 в 17:12)   письмо автору
 
   для: larush   (14.11.2005 в 15:54)
 

1) Как выглядит код нового окна?
2) Cookie в браузере включены?

   
 
 автор: larush   (14.11.2005 в 17:55)   письмо автору
 
   для: cheops   (14.11.2005 в 17:12)
 

К сожалению на данный момент времени, я снес тот вариант, перешел на иной. Но было что-то вроде
<a href= "...." target=_blank>
Куки включены

Сейчас у меня иной вопрос, открываю по нему новую тему

   
 
 автор: human   (15.11.2005 в 10:05)   письмо автору
 
   для: larush   (21.10.2005 в 17:22)
 

Проблема заключается в следующем.
Сессия доступна только из того окна броузера, в котором она была создана (если не пользоваться фреймами), а ссылка с Target=_Blank открывает НОВОЕ окно броузера, в котором session_start создает ПУСТУЮ сессию. Это равносильно тому, как если бы заново запустили броузер на этом же или другом компьютере. Понятно, что никакой инфомации из сессии, открытой в первом окне, получить невозможно.

Кстати, несмотря на обилие напущенного в книжках тумана, сессия - это всего-навсего простой текстовый файл, содержащий единственную строку с сериализованными в нее переменными. Причем этому файлу можно имя и каталог для хранения свои указывать.
(Плюс куки броузера, но они нужны только для автоматического поиска этого файла.)

Поэтому, в принципе, из нового окна можно получить информацию о переменных из сессии другого открытого окна, если передать ему имя и путь файла нужной сессии. А потом его отрыть и сделать unserialize().

   
 
 автор: larush   (15.11.2005 в 10:28)   письмо автору
 
   для: 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=" нет.

   
 
 автор: Loki   (15.11.2005 в 12:43)   письмо автору
 
   для: larush   (15.11.2005 в 10:28)
 

А является ли массив $HTTP_SESSION_VARS суперглобальным?

   
 
 автор: human   (15.11.2005 в 13:03)   письмо автору
 
   для: 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 />';
}

   
 
 автор: larush   (15.11.2005 в 15:30)   письмо автору
 
   для: human   (15.11.2005 в 13:03)
 

Во дела !!! Спасибо, Хуману !!!!
А в чем принципиальное отличие между $_SESSION и $HTTP_SESSION_VAR ? Я читал, что это просто варианты синтаксиса разных версий.

   
 
 автор: cheops   (15.11.2005 в 22:35)   письмо автору
 
   для: larush   (15.11.2005 в 15:30)
 

Это одно и тоже, но рекомендуется использовать $_SESSION, так как $HTTP_SESSION_VAR будет отменён в PHP 6 и уже сейчас отключается по умолчанию.

   
 
 автор: human   (20.11.2005 в 09:21)   письмо автору
 
   для: larush   (15.11.2005 в 15:30)
 

Это не совсем одно и то же.
Разница в том, что массив $_SESSION является суперглобальным или автоматически глобальным, а массив $HTTP_SESSION_VAR в функциях нужно объявлять глобальным директивой global.
Фактически это текстовый файл, содержащий строку с сериализованными переменными.
При любом добавлении переменных в этот массив автоматически производится модификация файла. А строка автоматически читается из файла и десериализуется в ассоциативный массив. с именем $_SESSION .
Добавлю еще, что для повышения безопасности register_globals обычно отключают, поэтому нужно самостоятельно извлекать переменные из этого массива, т.е. делать

$a = $_SESSION ['a'];

   
 
 автор: multiBrain   (15.11.2005 в 11:40)   письмо автору
 
   для: human   (15.11.2005 в 10:05)
 

В надставках на браузеры типа MyIE или Maxton, новые окна содержат сессии. Для разработчиков конечно не паноцея, а вот для пользователей удобно, особенно если любишь открывать страницы в новых окнах.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования