Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с сессиями, A session had already been started... 
V
    Опции темы
Gold Dragon
  Дата 4.9.2012, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Помогите разобраться с сессиями... 

У меня где-то в коде перед session_start() есть вывод html и соответственно выводится: "A session had already been started - ignoring session_start()".. 

Есть одна точна входа, что-то типа такого
Код

$GDPM = new GDPM();


Попробовал всё это дело закинуть в буффер, как-то так
Код

ob_start();
$GDPM = new GDPM();
$GDPM_html = ob_get_contents();
ob_end_clean();

echo $GDPM_html 

Но проблема не исчезла.. Что где не так?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
gta4kv
Дата 4.9.2012, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Сделай session_start до вывода html...
PM MAIL   Вверх
Gold Dragon
Дата 4.9.2012, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



не получится.. это CMS и там сессии стартуют когда нужно в отдельных компонентах :( На данном этапе всё переделывать очень накладно


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 4.9.2012, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Gold Dragon @  4.9.2012,  12:12 Найти цитируемый пост)
это CMS и там сессии стартуют когда нужно в отдельных компонентах

Это либо "Ужас-ужас", который по любому нужно переделать, либо централизованная система хранения информации о сессии, которой просто и цинично нужно воспользоваться перед реальным выводом на экран. Вообще, с таким отношением к сессии, в этой CMS, вероятно, предполагаются какие-то свои способы вывода? Может  документацию почитать - примеры посмотреть?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 4.9.2012, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(ksnk @  4.9.2012,  13:33 Найти цитируемый пост)
либо централизованная система хранения информации о сессии, которой просто и цинично нужно воспользоваться перед реальным выводом на экран. 
да, через механизмы плагинов.. Это наследие Joomla.

Однозначно с этим нужно что-то делать, но не на этом этапе.. А при данных условиях можно найти какой-нибудь выход?



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 4.9.2012, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



смотреть по этапно файл запуска и до ошибки возможно где то файл с BOM символом в начале файла.
Сори не так прочитал вопрос и понял другую суть....  мне нужно подумать....

Это сообщение отредактировал(а) Sanchezzz - 4.9.2012, 13:00


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Sanchezzz
Дата 4.9.2012, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Я так понимаю вам не нравится что он ругается на то что уже объявлено 

Первое нужен общий ob_start() до вывода всего на экран
Второе либо скрываем все ошибки нафиг или пишем костыль исключения грубый вариант

сессия в любом  случаи стартанет просто выводит вам сообщения что текущая операция не может быть выполнена так как был уже объявлен вызов session_start(); 

По хорошему это нужно проверку вставить если  strlen( session_id() ) < 1  то session_start(); во все места где session_start(); есть прям тупо поиск заменой

Грубый пример на скорую руку.
Код

error_reporting(-1);
//свой обработчик проще было бы error_reporting(0);
function my_error_handle($errno, $errstr ,$errfile , $errline , $errcontext = ''){
    if($errstr=='A session had already been started - ignoring session_start()'){ return;}else{
        print $errno." ".$errstr." ".$errfile." ".$errline." ".$errcontext;
    }
    


//ставим свой обработчик заместо стандартного.
set_error_handler( 'my_error_handle'  , -1 );

ob_start();
    print 'ssss';
    
        session_start();
        session_start();
        session_start();
        session_start();
        session_start();
        session_start();
    if(!isset($_SESSION['aaa'])) $_SESSION['aaa'] = 'сессия не была'; else $_SESSION['aaa'] = 'сессия есть';
    
    
    $GDPM_html = ob_get_contents();
    ob_end_clean();
echo $GDPM_html ;

print_r($_SESSION['aaa']);


Как видим сессия стартует и туда что то пишется а ошибок нету.

Надеюсь я правильно понял суть вашей проблемы , заранее извиняюсь.

Я бы выбрал вариант с рефакторингом кода и проверки на наличии старта сессии.



Это сообщение отредактировал(а) Sanchezzz - 4.9.2012, 14:24


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Gold Dragon
Дата 4.9.2012, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Sanchezzz @  4.9.2012,  15:15 Найти цитируемый пост)
По хорошему это нужно проверку вставить если session_id() < 1  то session_start()
ведь точно.... Что-то я не додумал... наверное уже замозолил мозги... Спасибо!!! +1

Вот только поясни ещё чуть-чуть...

У меня ошибка в том что до вызова сессии есть вывод... Я пробовал поместить всё в буфер, но ошибка всё равно есть. Никак не могу понять почему так.. т.е. алгоритм такой
Код


ob_start(); // старт буферизации 

$GDPM = new GDPM(); // входим для формирования HTML-кода, в т.ч. там где-то и session_start()

$GDPM_html = ob_get_contents(); // передаём буфер переменной

ob_end_clean(); // останавливаем буферизацию и очищаем буффер

// что-то делаем с данными ещё

echo $GDPM_html; // выводим результат


Где ошибка? или всё равно будет ошибка?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 4.9.2012, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



если ошибка насчет вывода до <? ob_start() то значит есть BOM символ  перед <? ob_start() или пробел в начале строки сохраните файл без BOM

Это сообщение отредактировал(а) Sanchezzz - 4.9.2012, 14:40


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Gold Dragon
Дата 4.9.2012, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Это практически не возможно... уж очень много файлов... Надеюсь что проблема именно в этом. 

Алгоритм вроде правильный.. Ну да ладно, вопрос решённый будем считать smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.