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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Сохранение сессии при "target= _blank"

Сообщения:  [1-10]   [11-16] 

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

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

$a = $_SESSION ['a'];

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

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

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

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

   
 
 автор: 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 />';
}

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

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

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

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

   
 
 автор: 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=" нет.

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

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

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

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

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

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

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

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

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

   

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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