Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Headers already sent


Автор: GPolis 29.1.2007, 12:56
Есть код логина. При его работе выдает
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /public_html/components/com_login.php:1) in /public_html/components/com_login.php on line 19

Что здесь может выводиться или отсылаться? На локальной маштне проблем не возникало. Они возникли при установке на сервер.

Код

<?
//подсоединяется к базе данных
mysql_connect('__','_________','_______');
mysql_select_db('_____________');
mysql_error();
//Проверяет ссылающийся URL
if(ereg("\?",$HTTP_REFERER)){
    $symbol = "&";
  } else {
    $symbol = "?";
  };
//проверяет логин и пароль
  $check = mysql_query("select * from `users` where `login`='$login' and `password`='$password'");
  $check = mysql_fetch_array($check);
  mysql_error();
//если логин и пароль совпали
  if(@$check){
    session_name('s');
    session_start();
    session_set_cookie_params(time()+3600*24);
    setcookie(session_name(),session_id(),time()+3600*24);
    $_SESSION['s_login']=$login;
    $_SESSION['s_ID']=$check['ID'];
    $_SESSION['s_name']=$check['name'];
    if(isset($_COOKIE['s'])){
      Header("Location: ".$HTTP_REFERER);
    } else {
      Header("Location: ".$HTTP_REFERER.$symbol."s=".session_id());
    };
//Если не совпали
  } else {
    $msg="Bad login or password";
    Header("Location: ../index.php?msg=".$msg);
    Header("Location: ".$HTTP_REFERER.$symbol."msg=".$msg);
   };
?>

Автор: Glip 29.1.2007, 12:59
 mysql_error(); возможно

Автор: mishaSL 29.1.2007, 13:16
Цитата(GPolis @  29.1.2007,  12:56 Найти цитируемый пост)
//проверяет логин и пароль
  $check = mysql_query("select * from `users` where `login`='$login' and `password`='$password'");
  $check = mysql_fetch_array($check);
  mysql_error();
//если логин и пароль совпали
  if(@$check){
    session_name('s');
    session_start();


Очень странная конструкция. Лучше так не делать.

Пример:
Код

//проверяет логин и пароль
  $query = mysql_query("select * from `users` where `login`='".mysql_real_escape_string($login)."' and `password`='".mysql_real_escape_string($password)."' LIMIT 1") or die(mysql_error());
//если логин и пароль совпали
  if(mysql_num_rows($query) > 0){
  session_start();
  $check = mysql_fetch_array($query);
// Дальше определяешь сессии и т.д.




Автор: PARROT 29.1.2007, 13:34
Цитата

Замечание: If you are using cookie-based sessions, you must call session_start() before anything is outputted to the browser. 

GPolis, пользуемся буферизацией, см. поиск по форуму.
http://ua2.php.net/manual/ru/function.session-start.php

Автор: GPolis 29.1.2007, 13:40
Glip, 
Убрал - то же самое


mishaSL, 
Спасибо за совет. Так, действительно, правильней. Однако, проблема с headers так и не решена

Автор: AztEK 29.1.2007, 13:49
Проверь, у тебя перед <? не стоит пустая строка?

Автор: GPolis 29.1.2007, 13:55
PARROT,

имеются в виду ob_start() b ob_end_flush()?

Так ведь согласно этого кода в браузер вообще ничего не выводится. Просто делаются нужные вычисления и происходит редирект на другую страницу

Добавлено @ 13:56 
AztEK, 
нет, строки такой нет, как и других символов

Автор: AztEK 29.1.2007, 14:01
Цитата(GPolis @  29.1.2007,  16:55 Найти цитируемый пост)

Так ведь согласно этого кода в браузер вообще ничего не выводится. Просто делаются нужные вычисления и происходит редирект на другую страницу

Где это такое написано? Внимательнее: http://ru.php.net/manual/ru/ref.outcontrol.php

Автор: GPolis 29.1.2007, 14:04
AztEK, 
Все, нашел бок!

Страница сохранялась в UTF-8, и редактор дописывал в ее начало дополнительную метку.

После сохранения в ANSI проблема решилась

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)