Премини към съдържанието

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

supervas

Грешка при стартиране на сесия и header('Location: ... ')

Препоръчан отговор


Проблема е следния:

В PHP файла обработващ една форма първо се стартира сесията с SESSION_START() на първия ред, а накрая има пренасочване към друга страница с HEADER('Location: main.php')

 

Съобщението за грешка е следното:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:docs2login.php:1) in C:docs2login.php on line 1Warning: Cannot modify header information - headers already sent by (output started at C:docs2login.php:1) in C:docs2login.php on line 26

PHP файла е следния:

<?php session_start(); ?><?php$user = substr(trim($_POST["user"]),0,15);$pass = substr(trim($_POST["pass"]),0,15);if (empty($user) or empty($pass)) exit('Не сте се регистрирали!');else{   $db = mysql_connect('localhost') or exit('Грешка при свързване с базаданните!');   $sel = mysql_select_db('tu-sofia',$db) or exit('Липсва таблица!');   $passSHA1 = sha1($pass) . 'f2';   $sql = sprintf("SELECT user,pass FROM students WHERE user='%s' AND pass='%s' LIMIT 1", @mysql_real_escape_string($user), @mysql_real_escape_string($passSHA1));   $res = mysql_query($sql,$db) or exit();   if (mysql_num_rows($res) < 1) exit('Грешен потребител или парола!');   mysql_free_result($res);   mysql_close($db);   $_SESSION['user'] = $user;   $_SESSION['pass'] = $passSHA1;  header('Location: /main.php');}?>

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Пробвай дали сега ще тръгне:

<?php session_start();$user = substr(trim($_POST["user"]),0,15);$pass = substr(trim($_POST["pass"]),0,15);if (empty($user) or empty($pass)) exit('Не сте се регистрирали!');else{   $db = mysql_connect('localhost') or exit('Грешка при свързване с базаданните!');   $sel = mysql_select_db('tu-sofia',$db) or exit('Липсва таблица!');   $passSHA1 = sha1($pass) . 'f2';   $sql = sprintf("SELECT user,pass FROM students WHERE user='%s' AND pass='%s' LIMIT 1", @mysql_real_escape_string($user), @mysql_real_escape_string($passSHA1));   $res = mysql_query($sql,$db) or exit();   if (mysql_num_rows($res) < 1) exit('Грешен потребител или парола!');   mysql_free_result($res);   mysql_close($db);   $_SESSION['user'] = $user;   $_SESSION['pass'] = $passSHA1;  header('Location: /main.php');}?>

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма разлика. Все още излизат двете грешки.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма разлика. Все още излизат двете грешки.

 

Значи имаш нещо преди този скрипт, от което гърмят нещата, или някаква настройка на php.ini прави проблема, защото при мен върви.

PS: С коя версия на PHP си?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Кода ви да не е в html тяло преди PHP тага?

Явно е, че нещо праща хедъри преди PHP да отвори сесия, въпроса е какво.

 

Обикновено отделянето на session_start инициализатора в отделен таг (макар, че не е толкова хубава практика) решава безусловно проблема, тъй като се извършва една операция, сесията става активна за даденият скрипт, прекратява се изпълнението на PHP, и по-надолу съответно пак се отваря.

При вас обаче няма ефект, за това най-вероятно проблема е някъде другаде.


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма разлика. Все още излизат двете грешки.

Имаш включен BOM или пробел преди отварящия таг на php. Те се смятат за html - съдържание и затова пищи.

 

Това не е издържано.

if (empty($user) or empty($pass)) exit('Не сте се регистрирали!');

научете разликата между II и or.

 

Трето, ред 26 също ще гърми. Препращате в root на системата, а не в рамките на сайта.

 

Location: /main.php => Location: ./main.php или Location: main.php

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Имаш включен BOM или пробел преди отварящия таг на php. Те се смятат за html - съдържание и затова пищи.

 

Това не е издържано.

if (empty($user) or empty($pass)) exit('Не сте се регистрирали!');

научете разликата между II и or.

 

Трето, ред 26 също ще гърми. Препращате в root на системата, а не в рамките на сайта.

 

Location: /main.php => Location: ./main.php или Location: main.php

 

Няма нищо преди PHP сктипта и той почва от първи ред, първа колона.

Версията на PHP е 5.4.17.

 

Какво е BOM?

Реших проблема, като записах PHP файла в ASCII формат. Беше в UTF-8.

Интересно ми е дали има начин да си остане в UTF-8?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма нищо преди PHP сктипта и той почва от първи ред, първа колона.

Версията на PHP е 5.4.17.

 

Какво е BOM?

Реших проблема, като записах PHP файла в ASCII формат. Беше в UTF-8.

Интересно ми е дали има начин да си остане в UTF-8?

 

Нищо не си решил. И точно тези галимации са ти заподзряния проблем. Изключи си BOM, като записваш в UTF-8.

 

Публикувано изображение

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Нищо не си решил. И точно тези галимации са ти заподзряния проблем. Изключи си BOM, като записваш в UTF-8.

 

Публикувано изображение

 

Горната картинка от кой редактор е?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.