session_register не успевает

  • Автор темы Светлана PHP
  • Дата начала

Светлана PHP

Guest
session_register не успевает

Скрипт A.php производит регистрацию переменной сессии, присваивает ей значение и тут же редиректируется на B.php

Последний скрипт "не успевает" схватить изменения и воспринимает the переменную со старым её значением. То есть значение не изменяется.

Если я перед редиректом, который, кстати сказать, делается за счёт послания формы в нужное место методом POST, делаю так: " alert('') ", то скрипт B.php воспринимает переменную с изменённым значением.

Такое ощущение, что session_register не успевает...
Может кто-нибудь знает в чём тут дело?

P.S.
Как то я пробовала flush() ставить - помогало, а щас чего-то опять... :(

-~{}~ 01.11.04 22:42:

Привожу код функции... Я добавила помимо flush() ob_flush() , вот...
PHP:
                        function main_setsessionvar($a, $b="", $get=false)
                                {

                                        global $$a;

                                        if (!$get)
                                        {

                                                if (!isset($$a) && $b!="")
                                                        {

                                                                if (!session_register($a))
                                                                        $this->error("FILE>>".__FILE__." :: LINE>>".__LINE__." :: "."Variable can't registred.");
                                                
                                                                        global $$a;
                                                                
                                                                        $$a = $b;

                                                                ob_flush();
                                                                flush();

                                                                return $$a;

                                                        }

                                                if (!isset($$a) && $b=="")
                                                        {
                                                                $$a = "";

                                                        }

                                                if (isset($$a) && $b!="")
                                                        {

                                                                session_unregister($a);
                                                                if (!session_register($a))
                                                                        $this->error("FILE>>".__FILE__." :: LINE>>".__LINE__." :: "."Variable can't registred.");

                                                                global $$a;
                                                                $$a = $b;

                                                                ob_flush();
                                                                flush();

                                                        }

                                        }
                                        
                                        ob_flush();
                                        flush();
                                        return $$a;
                                        
                                }
 

SelenIT

IT-лунатик :)
Светлана PHP

1) (на всяк. случай) Знанием PHP FAQ: Сессии., надеюсь, уже вооружены?
2) Что это за новый оригинальный способ редиректа и чем продиктована его необходимость?
 

Светлана PHP

Guest
То есть всё получилось. :) :) :)

-~{}~ 01.11.04 22:46:

Способ редиректа?

Да я переменные кое-какие ганяю периодически... Можно конечно header посылать нужный... Функцию там придумать... Просто в одном случае пользователю по логике предлагается нажать сабмит а в другом этой необходимости нет, но переменные передать надо бы...

Ну так я и посылаю всё аутоматычэски... :)
 

SelenIT

IT-лунатик :)
еще на всякий случай на будущее и во избежание: PHP FAQ: Сессии. Ошибки.

+ вопрос/замечание по коду: в чем смысл трехкратного объявления переменной $$a глобальной?

+ еще раз про редирект: если я правильно понял, там форма сабмиттится яваскриптом?
 

Светлана PHP

Guest
Вот хотелось бы узнать мнэние завсегдатаих, каким это образом буфер вывода может быть связан с handler'ом сэссий?

-~{}~ 01.11.04 22:52:

Смысл?

:D Для надёжности :D

Видите ли, для меня программирование это во многом ощущения, одним словом... :p просто так... чиста женская логика....

Ой а правда, зачем это я;) . Не ну ведь процессор не грузит - фигня...
Знаете есть художники, которые все в масле ходят... а творят!

-~{}~ 01.11.04 22:54:

Да форма js сабмитится, думаете всё по этой причине?..
 

SelenIT

IT-лунатик :)
Про связь сессий и буфера: навскидку - механизм сессий использует cookies, которые есть частный случай http-заголовков. Заголовки не могут быть отправлены после любого вывода, а буферизация вывода в ряде случаев позволяет обойти эту проблему. Я бы все же поискал, что там может выводиться (может, пробел, может, сообщение об ошибке...)
 

Gas

может по одной?
Видите ли, для меня программирование это во многом ощущения, одним словом... просто так... чиста женская логика....
Ах эти милые женщины ;)
 

Светлана PHP

Guest
Разве речь не идёт о буфере вывода PHP? flush() ob_flush() именно на него влияют...

Может тут именно обработчик сессий, так сказать, виновен? Нэ?!!
 

SelenIT

IT-лунатик :)
Все же настоятельно советую вооружиться новой информацией из ссылок. В пределе она позволит ликвидировать session_register-ы как класс и тем самым избавиться от всех связанных с ними проблем)
 
Сверху