Найти ошибку в коде авторизации

Статус
Закрыто для дальнейших ответов.

artvor96

Well-Known Member
Регистрация
19.06.2010
Сообщения
130
Доброго времени суток, уважаемые форумчане :biggrin:
Помогите, пожалуйста, найти ошибку в коде:
Код:
<?php
require("./config.php");
if (isset($_POST['login'])) {
   $passwordHash = md5($_POST['password']);
   $login = $_POST['login'];
  
   // Проверка логина на плохие символы
   if (!preg_match("/^\w{3,}$/", $login)) {
	  die('Неправильный логин!');
   }
   $link = mysql_connect("localhost",$dbuser,$dbpass);
   if (!$link) {
	  die('Не удалось соединиться с БД');
   }
   else{
	  mysql_select_db('baseforsaferiglk', $link);
	  $res = mysql_query("SELECT status FROM users WHERE login='$login' AND password='$passwordHash'", $link);
	  // Есть ли пользователь с таким логином?
	  if (mysql_num_rows($res) < 1) {
		 mysql_close($link);
		 die('Такого пользователя нет!');
	  }
	  // Какой статус у пользователя?
	  if (mysql_result($res, 0) != 1) {
		 mysql_close($link);
		 die('Логин не активирован!');
	  }
	  // Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
	  session_start();
	  $_SESSION['user'] = $login;
   $token = md5(time().$login);
   mysql_query("UPDATE users SET token='$token' WHERE login='$login'");  
	  setcookie('token', $token, time() + 60 * 60 * 24 * 14);
	  mysql_close($link);
	  header ("location: page.php");
   }
  
}
?>
Ошибка вылезает следующая:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at Z:\home\now\www\login.php:1) in Z:\home\now\www\login.php on line 29
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\now\www\login.php:1) in Z:\home\now\www\login.php on line 29
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\now\www\login.php:1) in Z:\home\now\www\login.php on line 33
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\now\www\login.php:1) in Z:\home\now\www\login.php on line 35
P.S. Файл config.php существует, и переменные $dbuser и $dbpass тоже
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Вы что-нибудь выводите до строки № 29? В ошибке написано что вы уже послали заголовки, т.е. вывели что-нибудь на экран, например через функцию print или конструкцию echo[sup][1][/sup].
 

artvor96

Well-Known Member
Регистрация
19.06.2010
Сообщения
130
Вы что-нибудь выводите до строки № 29? В ошибке написано что вы уже послали заголовки, т.е. вывели что-нибудь на экран, например через функцию print или конструкцию echo[sup][1][/sup].
Нет. Я привел здесь весь код страницы.
Я понимаю, что это за ошибка, но не могу понять, почему она вылезает и где в коде находится :(
В config.php только присвоение двух переменных и тоже ничего не выводится.
HTML есть только на предшествующей странице, которая адресует пользователя сюда во время обработки формы. Но, как я понимаю, это не влияет на возникновение ошибки подобного рода
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
[member=artvor96], может быть попробуйте сначала куку объявить а потом сессию.
Также в ошибке указано что вы уже что-то вывели на первой линии, попробуйте поискать в "показать исходный код" пробелы или другие символы, т.к. PHP говорит что там что-то вывелось на первой строке.
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
session_start() должен быть первым вызовом функции в каждом файле кода, использующего сессии и include и require здесь не проходят.
Посмотрите примеры! Каждый из них начинается с :
Код:
<?php
session_start();
http://docs.php.net/manual/ru/book.session.php
 

artvor96

Well-Known Member
Регистрация
19.06.2010
Сообщения
130
[member=artvor96], может быть попробуйте сначала куку объявить а потом сессию.
Также в ошибке указано что вы уже что-то вывели на первой линии, попробуйте поискать в "показать исходный код" пробелы или другие символы, т.к. PHP говорит что там что-то вывелось на первой строке.
[member=Volter9], Сначала объявил куку, потом сессию. В итоге вместо строки 1 ошибка влезает в строке 33, где объявляется кука.
Второй совет тоже не помог


session_start() должен быть первым вызовом функции в каждом файле кода, использующего сессии и include и require здесь не проходят.
Посмотрите примеры! Каждый из них начинается с :
Код:
<?php
session_start();
http://docs.php.net/...ook.session.php

[member=tigra60], Спасибо! Теперь осталось только две ошибки:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at Z:\home\now\www\login.php:1) in Z:\home\now\www\login.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\now\www\login.php:1) in Z:\home\now\www\login.php on line 2
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
[member=artvor96], та же самая проблема. Где-то что-то вывелось. И вообще это не ошибка, а Warning (предупреждение).

А у вас есть какие-нибудь символы до "<?php"?
Вы сохранили скрипт в кодировке UTF-8 без BOM?

После вывода информации в браузар слать заголовки нельзя. Остается только осмыслить, что такое вывод в браузер. Да-да, если вы это читаете, то вы это не осмыслили.
* команды вывода php (echo, print...)
* различные warnigs, notices, которые произошли в результате других операций в скрипте.
* ЛЮБЫЕ СИМВОЛЫ, расположенные до <?php. Это и пробелы, и энтеры, и невидимый символ BOM.


...

Короче, скрипты, написанные в UTF-8 следует сохранять без BOM и во многих текстовых редакторах есть эта возможность. Всё.
[ http://forum.php.su/...um=1&topic=3026 ]
 

artvor96

Well-Known Member
Регистрация
19.06.2010
Сообщения
130
[member=artvor96], та же самая проблема. Где-то что-то вывелось. И вообще это не ошибка, а Warning (предупреждение).

А у вас есть какие-нибудь символы до "<?php"?
Вы сохранили скрипт в кодировке UTF-8 без BOM?

После вывода информации в браузар слать заголовки нельзя. Остается только осмыслить, что такое вывод в браузер. Да-да, если вы это читаете, то вы это не осмыслили.
* команды вывода php (echo, print...)
* различные warnigs, notices, которые произошли в результате других операций в скрипте.
* ЛЮБЫЕ СИМВОЛЫ, расположенные до <?php. Это и пробелы, и энтеры, и невидимый символ BOM.


...

Короче, скрипты, написанные в UTF-8 следует сохранять без BOM и во многих текстовых редакторах есть эта возможность. Всё.
[ http://forum.php.su/...um=1&topic=3026 ]
[member=Volter9], огромнейшее спасибо! Кодировал все в обычном UTF-8. Преобразовал в UTF-8 без BOM и ошибки исчезли :)
Думаю, тему можно закрывать
 
Статус
Закрыто для дальнейших ответов.
Верх Низ