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;
                                        
                                }
 
Светлана PHP

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

-~{}~ 01.11.04 22:46:

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

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

Ну так я и посылаю всё аутоматычэски... :)
 
еще на всякий случай на будущее и во избежание: PHP FAQ: Сессии. Ошибки.

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

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

-~{}~ 01.11.04 22:52:

Смысл?

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

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

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

-~{}~ 01.11.04 22:54:

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

Может тут именно обработчик сессий, так сказать, виновен? Нэ?!!
 
Все же настоятельно советую вооружиться новой информацией из ссылок. В пределе она позволит ликвидировать session_register-ы как класс и тем самым избавиться от всех связанных с ними проблем)
 
Сверху