Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/
-kubek3898-
post
Post #1





Goście







Wiem, wiem takich tematów było już tysiące lecz żadne rady dot. nich nie podziałały. Próbowałem:

- przed session_start(); dać ob_start(); jak i ob_start("ob_gzhandler");
- kodowanie UTF8 BEZ BOM
- usunałęm wszystkie spacje, entery przed rozpoczęciem sesji

Mogę oczywiście wyłączyć raportowanie błędów lecz nie chcę ukryć problemu, a go rozwiązać.

Mój kod:

  1. <?php
  2.  
  3. if( !defined( 'GAME_THIS_SCRIPT' ) )
  4. die( 'Access denied' );
  5.  
  6.  
  7. if( $_SESSION[ 'logged' ] )
  8. echo 'Już jesteś zalogowany!';
  9. else
  10. {
  11. $showWindow = '<div class="login">';
  12. $showWindow .= '<form action="?task=login" method="post">';
  13. $showWindow .= 'Login: <input type="text" name="login"><br />';
  14. $showWindow .= 'Hasło: <input type="password" name="pass"><br />';
  15. $showWindow .= 'Świat: <select name="world"><option>Świat 1</option><option>Świat 2</option></select><br />';
  16. $showWindow .= '<input type="submit" name="sendLogin" value="Zaloguj"><br />';
  17. $showWindow .= '</form>';
  18. $showWindow .= '</div>';
  19.  
  20. echo $showWindow;
  21.  
  22. if( isset( $_POST[ 'sendLogin' ] ) )
  23. {
  24. $login = trim( $_POST[ 'login' ] );
  25. $pass = trim( $_POST[ 'pass' ] );
  26.  
  27. if( empty( $login ) || empty( $pass ) )
  28. echo 'Wypełnij wszystkie pola!';
  29. else
  30. {
  31.  
  32. $pass = sha1( $pass );
  33.  
  34. $result = mysql_query( "SELECT * FROM users WHERE login='$login' AND pass='$pass'" );
  35.  
  36. if( mysql_num_rows( $result ) == 0 )
  37. echo 'Niestety lecz podałeś niepoprawne dane!';
  38. else
  39. {
  40. $row = mysql_fetch_array( $result );
  41.  
  42. $_SESSION[ 'logged' ] = true;
  43.  
  44. $_SESSION[ 'id' ] = $row[ 'id' ];
  45. $_SESSION[ 'login' ] = $row[ 'login' ];
  46. $_SESSION[ 'world' ] = $row[ 'world' ];
  47.  
  48. echo 'Logowanie zakończone sukcesem!';
  49. }
  50. }
  51. }
  52. }
  53.  
  54.  
  55. ?>
Go to the top of the page
+Quote Post
maniana
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 18.05.2007

Ostrzeżenie: (0%)
-----


W headers already sent by... powinieneś mieć nazwę pliku i nr linii gdzie już zostały wysłane dane...
Go to the top of the page
+Quote Post
zbig
post
Post #3





Grupa: Zarejestrowani
Postów: 144
Pomógł: 30
Dołączył: 5.05.2007
Skąd: Mannheim

Ostrzeżenie: (0%)
-----


Witam!

Sprobuj
przesunac przed
, taki test maly, bo gdzies przed startem sesji jest przeslany prawdopodobnie jakis NOTICE do przegladarki.
Byc moze Twoj plik jest includowany przez inny plik ktory wysyla cos do przegladarki.
A tak na marginesie to dziwna jest ta logika wyswietlania formularza i sprawdzania przeslanych POST.
No ale to juz sprawa indywidualna (IMG:style_emoticons/default/wink.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
maniana
post
Post #4





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 18.05.2007

Ostrzeżenie: (0%)
-----


@zbig
Mówisz o logice? ja to pominąłem. Bo co logicznego jest w:
Cytat
HTMLSpecialChars( $pass )
(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
com
post
Post #5





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


gdzieś jednak najprawdopodobniej masz białe znaki może przed <?php (IMG:style_emoticons/default/wink.gif)

  1. <?php
  2. if( !defined( 'GAME_THIS_SCRIPT' ) )
  3. die( 'Access denied' );
  4.  
  5.  
  6.  
  7.  
  8. if( $_SESSION[ 'logged' ] )
  9. echo 'Już jesteś zalogowany!';
  10. else
  11. {
  12. $showWindow = '<div class="login">';
  13. $showWindow .= '<form action="?task=login" method="post">';
  14. $showWindow .= 'Login: <input type="text" name="login"><br />';
  15. $showWindow .= 'Hasło: <input type="password" name="pass"><br />';
  16. $showWindow .= 'Świat: <select name="world"><option>Świat 1</option><option>Świat 2</option></select><br />';
  17. $showWindow .= '<input type="submit" name="sendLogin" value="Zaloguj"><br />';
  18. $showWindow .= '</form>';
  19. $showWindow .= '</div>';
  20.  
  21. echo $showWindow;
  22.  
  23. if( isset( $_POST[ 'sendLogin' ] ) )
  24. {
  25. $login = trim( $_POST[ 'login' ] );
  26. $pass = trim( $_POST[ 'pass' ] );
  27.  
  28. if( empty( $login ) || empty( $pass ) )
  29. echo 'Wypełnij wszystkie pola!';
  30. else
  31. {
  32.  
  33. $pass = sha1( $pass );
  34.  
  35. $result = mysql_query( "SELECT * FROM users WHERE login='$login' AND pass='$pass'" );
  36.  
  37. if( mysql_num_rows( $result ) == 0 )
  38. echo 'Niestety lecz podałeś niepoprawne dane!';
  39. else
  40. {
  41. $row = mysql_fetch_array( $result );
  42.  
  43. $_SESSION[ 'logged' ] = true;
  44.  
  45. $_SESSION[ 'id' ] = $row[ 'id' ];
  46. $_SESSION[ 'login' ] = $row[ 'login' ];
  47. $_SESSION[ 'world' ] = $row[ 'world' ];
  48.  
  49. echo 'Logowanie zakończone sukcesem!';
  50. }
  51. }
  52. }
  53. }
  54.  
  55.  
  56. ?>
Go to the top of the page
+Quote Post
-kubek3898-
post
Post #6





Goście







Cytat(zbig @ 27.05.2013, 18:47:44 ) *
Witam!

Sprobuj
przesunac przed
, taki test maly, bo gdzies przed startem sesji jest przeslany prawdopodobnie jakis NOTICE do przegladarki.
Byc moze Twoj plik jest includowany przez inny plik ktory wysyla cos do przegladarki.
A tak na marginesie to dziwna jest ta logika wyswietlania formularza i sprawdzania przeslanych POST.
No ale to juz sprawa indywidualna (IMG:style_emoticons/default/wink.gif)

Pozdrawiam


Możecie mi podać wiecej takich bledow logicznych bym w przyszlosci uniknal zlych nawykow?

@topic

Wasze rady sprawdze jutro, dzis juz niestety nie dam rady
Go to the top of the page
+Quote Post
gitbejbe
post
Post #7





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


błędów w logice nauczysz się sam wraz z praktyką. Jedna poważna rzecz jaka rzuca się mocno w oczy jest
  1. $result = mysql_query( "SELECT * FROM users WHERE login='$login' AND pass='$pass'" );

po co pobierasz wszystko ? Fakt, zamieszałeś zmienne logowania tymi konwerterami ale tak czy siak dobrą praktyką nie jest pobieranie wszystkiego.

Ty potrzebujesz sprawdzić tylko czy ktoś taki istnieje, więc jeśli potrzebujesz dodatkowych zmiennych do sesji to robisz SELECT id,login,world FROM (itd). Po co masz pobierać w zapytaniu wszystkie parametry ? Dla kogo to robisz ? dla mnie ? bo napewno nie dla siebie ;p

co do sesji to uporządkuj kod i ładuj sesje tylko w jednym miejscu, np includujesz sobie plik config.php gdzie masz funkcje session_start() i połączenie z bazą danych
Błąd się pojawia bo ta funkcja może zostać wywołana tylko raz, a ty widocznie gdzies już ją rozpocząłeś.

Rozwiązaniem jest jeszcze - jak napisał kolega wyżej : ob_start() przed rozpoczęciem sesji - a najlepiej na samym początku dokumentu, wtedy możesz sobie pisać tych session_start dowoli (co jest mimo wszystko złą praktyką;p). To samo spotka Cię również np z header();
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.09.2025 - 21:29