• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблема с Session_start();

  • Автор темы morti
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

morti

<?php
//include script with all functions for this project
require_once('bookmark_fns.php');

$email = $_POST['email'];
$username = $_POST['username'];
$passwd = $_POST['passwd'];
$passwd2 = $_POST['passwd2'];

session_start();
?>
Если так писать то на строчке где находится
session_start(); выдает ошибку Cannot send session cookie - headers already sent by (output started at D:\Site\localhost\www\bookmark\bookmark_fns.php:12) in
если же поместить session_start(); в самое начало скрипта
<?php
session_start();
?>
то все отработает нормально.
Как сделать, чтобы эта функция могла отрабатывать
в середине скрипта. Стоит PHP5. Работаю в PHP Expert Editor
 
A

admin

Для: morti
а какая разница где её ставить?
просто не выводи на экран ничего до нее и всё.
 
M

morti

<!--QuoteBegin-Andrew Stephanoff+26:11:2006, 02:34 -->
<span class="vbquote">(Andrew Stephanoff @ 26:11:2006, 02:34 )</span><!--QuoteEBegin-->Код
@session_start();
[snapback]48916" rel="nofollow" target="_blank[/snapback]​
[/quote]

А сессия разве запустится?
 
A

Andrew Stephanoff

Сорри, показалось, что ты два раза сессию запускаешь.
Конечно, надо запускать в самом начале.
@session_start(); помогает в том случае, если ты точно не знаешь, будет ли запущена сессия к данному моменту.
 
T

tIT

Любые функции, которые отсылают клиенту заголовки надо вызывать ДО вывода какого либо текста. Если такой подход не устраивает, используем буферизацию вывода ob_start().

Для: Andrew Stephanoff
Зачем вредные советы давать? @ - источник многих и многих ошибок. Она реально оправдана только тогда, когда зарегистрирован свой обработчик ошибок и не хочется видеть на страницах сообщения об ошибках. И даже в этом случае лучше использовать не @, а просто отключать вывод отладочных сообщений на страницу и включать логирование.
 
S

s10

2 tIT
согласен.
но за все время работы с пхп ни разу не делал вывод через буфер.
и пока не представляю ситуацию, в которой без него нельзя было бы обойтись.

а у товарища morti наверное что то на подобии :
Код:
<?php
echo 'превед страна';
session_start();
?>
:(

2 morti
сессию в начало ставь, tIT правильно сказал.
 
A

Andrew Stephanoff

Зачем вредные советы давать? @ - источник многих и многих ошибок. Она реально оправдана только тогда, когда зарегистрирован свой обработчик ошибок и не хочется видеть на страницах сообщения об ошибках. И даже в этом случае лучше использовать не @, а просто отключать вывод отладочных сообщений на страницу и включать логирование.
Ну это смотря с какой точки зрения смотреть. Вот у меня бывают случаи, когда я точно не знаю, будет ли инициализирована сессия в какой-то момент выполнения программы. Можно поставить проверку, а можно просто написать @session_start(); и ничего страшного не случится. Я же не говорю повсеместно подавлять ошибки.
 
M

morti

Для: s10
не угадали
Проблема крылась в лишнем прбобеле ПОСЛЕ скрипта.
 
T

tIT

<!--QuoteBegin-s10+3:01:2007, 12:42 -->
<span class="vbquote">(s10 @ 3:01:2007, 12:42 )</span><!--QuoteEBegin-->пока не представляю ситуацию, в которой без него нельзя было бы обойтись.[/quote]
Постобработка выходного потока. Например, преобразование <a href="{DB_ID: 2100023162}"> на <a href="/news/2006/04/13"> или же финальное преобразование XML во что-либо через XSLT. Можно кучу всего придумать.

<!--QuoteBegin-Andrew Stephanoff+3:01:2007, 12:59 -->
<span class="vbquote">(Andrew Stephanoff @ 3:01:2007, 12:59 )</span><!--QuoteEBegin-->Можно поставить проверку, а можно просто написать @session_start(); и ничего страшного не случится.[/quote]
Потом теоретически могут начаться танцы с бубнами (-;
В своем-то коде надо знать, что сработает, а что нет. Код растет - зато вероятность лечения шаманством сокращается.
В одном из последних проектов решил разнообразия ради при регистрации пользователя предусмотреть ВСЕ ошибки, которые могут произойти. Предусмотрел буквально все (логин некорректный, почта некорректная, логин занят, почта занята, пароли не совпадают, такого кода нет в базе, код уже кем-то активирован, такое-то поле не заполнено и т.д.)! (для рекламы: при этом использовалась офигенная библиотека, в которую я въезжал около часа HTML_MetaForm). Обновляю на сервер из CVS и со спокойной душой ложусь спать... забыв проверить работоспособность на боевом сервере.
На следующую новогоднюю ночь иду посмотреть, сколько пользователей зарегистрировалось и с удивлением обнаруживаю, что сей скрипт у меня умирает и ничего не пишет. Полчаса не мог понять, в чем дело - у меня работает, на боевом сервере нет... Экспериментальным путем выяснил, что грохается библиотека DbSimple2 при выполнении запроса... Иду в EMS PostgreSQL, проверяю для пользователя права (ну мало ли) - все верно... Спустя некоторое время до меня дошло убрать собаку перед pg_query - так и есть call to undefined function pg_query! Так твою разэдак, ну не подключил я к библиотеке обработчик ошибок! Пересобрал php (при чем, со второго раза - с первого USE="postgresql" написал вместо опять забыл чего) и все заработало.

Если б не было собаки, я бы моментально нашел ошибку. Справедливости ради отмечу, что на сайте dklab.ru (да какой там поддержки, я сам эту библиотеку так же поддерживаю!) четко написано: "Нечего и думать использовать библиотеку, если нет своего механизма обработки ошибок!" или вроде того.

<!--QuoteBegin-morti+3:01:2007, 15:16 -->
<span class="vbquote">(morti @ 3:01:2007, 15:16 )</span><!--QuoteEBegin-->Проблема крылась в лишнем прбобеле ПОСЛЕ скрипта.[/quote]
А скрипт этот случайно не bookmark_fns.php называется? )))
 
M

morti

Для: tIT
Уже не помню, но вроде что то из Вейлинга писал)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!