Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nietypowy problem session_start
AuronDiel
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 2.06.2012

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


Witam wszystkich! (IMG:style_emoticons/default/smile.gif)
Na wstęp napiszę, że od 8 godzin szukam w necie rozwiązania mojego problemu i nic, przeczytałem wiele tematów o kodowaniu BOM, spacji przed <?php, przeszukałem też tutejsze forum, też nic ciekawego.
Zdesperowany postanowiłem napisać mój problem tutaj.
  1. <?php
  2.  
  3. // rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
  4.  
  5. // start sesji
  6.  
  7. // połączenie z mysql
  8. mysql_connect('localhost', 'root', '')
  9. or die('Nieudane polaczenie z baza danych...');
  10.  
  11. // wybór bazy danych
  12. or die('Nie udalo sie wybrac bazy danych...');
  13.  
  14. // nagłówek
  15. echo '<h2>Logowanie</h2>';
  16.  
  17. // sprawdzamy czy user jest już zalogowany
  18. if($_SESSION['logged']) echo 'Już jestes zalogowany!';
  19. else
  20. {
  21. // tworzymy prosty formularz
  22. echo '<form action="login.php" method="POST">
  23. Nick: <br />
  24. <input type="text" name="nick"><br />
  25. Hasło: <br />
  26. <input type="password" name="pass"><br />
  27. <input type="submit" name="ok" value="Zaloguj">
  28. </form>';
  29.  
  30. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  31. if(isset($_POST['ok']))
  32. {
  33. $nick = $_POST['nick'];
  34. $pass = $_POST['pass'];
  35.  
  36. // sprawdzamy czy wszystkie dane zostały podane
  37. if(empty($nick) || empty($pass)) echo 'Wpisz wszystkie pola!';
  38. // jeśli tak...
  39. else
  40. {
  41. // filtrujemy dane
  42.  
  43. // kodujemy hasło
  44. $pass = md5($pass);
  45.  
  46. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  47. $result = mysql_query("SELECT * FROM users WHERE nick='$nick' AND pass='$pass'");
  48.  
  49. // jeśli nie istnieje
  50. if(mysql_num_rows($result)==0) echo 'Niestety podałes niepoprawne dane!';
  51. // jeśli tak...
  52. else
  53. {
  54. // dodajemy wynik zapytania do tablicy
  55. $row = mysql_fetch_array($result);
  56.  
  57. // ustawianie sesji że użytkownik jest zalogowany
  58. $_SESSION['logged'] = true;
  59.  
  60. // dodawanie do sesji id użytkownika, login oraz datę rejestracji
  61. $_SESSION['id'] = $row['id'];
  62. $_SESSION['nick'] = $row['nick'];
  63. $_SESSION['data_rejestracji'] = $row['data_rejestracji'];
  64.  
  65. // wyświetlenie komunikatu oznaczającego poprawne logowanie
  66. echo 'Zostałes poprawnie zalogowany! Możesz teraz przejsć na <a href="index.php">stronę główna</a>';
  67. }
  68. }
  69. }
  70. }
  71.  
  72. // rozłączenie z bazą danych
  73.  
  74. // koniec buforowania
  75. ?>

O to mój skrypt logowania który zamieszczam w indexie.
  1. <title>xx</title>
  2. <link href="css/dropdown/dropdown.css" media="screen" rel="stylesheet" type="text/css" />
  3. <link href="css/dropdown/themes/mtv.com/default.ultimate.css" media="screen" rel="stylesheet" type="text/css" />
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  5. <link rel="Stylesheet" type="text/css" href="style.css" />
  6. <link rel="Shortcut icon" href="images/ico.ico" />
  7. </head>
  8. <body background="images/body_bg.gif" bgproperties="fixed" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
  9. <div id="top">
  10. <div id="NAGLOWEK">
  11. <div id="menuu">
  12. <ul id="nav" class="dropdown dropdown-horizontal">
  13. </li>
  14. <li id="n-home"><span class="dir">Rejestracja</span>
  15.  
  16. </li>
  17. </li>
  18. <li id="n-home"><span class="dir">x</span>
  19.  
  20. </li>
  21. </li>
  22. <li id="n-home"><span class="dir">Zaloguj się</span>
  23.  
  24. </li>
  25. </li>
  26. <li id="n-home"><span class="dir">Kontakt</span>
  27.  
  28. </li>
  29. </ul>
  30.  
  31.  
  32.  
  33.  
  34. </div>
  35.  
  36.  
  37. <br><br><br>
  38. <a href="index2.html" border="0"><img src="images/xx.png" ></a>
  39. <br>
  40. </div>
  41. <div id="MENU"><img src="images/wybierz.png" ></div>
  42. <div id="INFORMACJE"></div>
  43. <div id="TRESC">
  44. <br><br>
  45. <font size="5" color="orange">Logowanie</font><br>
  46. <hr size="1" Color="gray" >
  47.  
  48. <tr>
  49. <td bgcolor="#202020" border="0" id="kontakttabela">
  50. <br><?php
  51. require_once('re/login.php');
  52. ?>
  53.  
  54. <br><br><br>
  55. </td>
  56. </tr>
  57. <br><br><br><br>
  58.  
  59.  
  60. </div>
  61. <div id="STOPKA">
  62. <font color="white" face="Verdana" id="trescstopki">
  63. <br>
  64. @ xxx
  65. </font>
  66. </div>
  67. </body>
  68. </html>


A otrzymany błąd to oczywiście:
,,Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent"
Chyba dosłonie próbowałem wszystkiego.. jedynie co ciekawego przykuło moją uwage to, że kiedy wchodzę w plik login.php to nie wypisuje mi błedu, dopiero kiedy go gdzieś wrzucam to nie działa.. kompletnie nie rozumiem

Prosze was bardzo o pomoc

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lucaa44
post
Post #2





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 26.05.2007

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


kolego AuronDiel, ja bym powiedzial ze problem jest jak najbardziej typowy, mi kiedys dosc czesto sie zdarzal;]...poza tym jakby nie bylo klania sie MANUAL(IMG:style_emoticons/default/exclamation.gif) , a konkretnie znajomosc dzialania sesji, funkcji sesji i dzialania naglowkow: sesje - http://www.php.net/manual/pl/function.session-start.php -

Cytat
Informacja:

Jeśli używasz sesji opartych o ciasteczka, to session_start() musi być wywołane przed wysłaniem jakichkolwiek danych do przeglądarki.
(jakichkolwiek czyli tez HTML'a i bialych znakow czyli np spacji)
,

naglowki - http://www.php.net/manual/pl/function.header.php -

Cytat
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called.
(czarno na bialym;])

dlaczego pisze o naglowkach?? ano, podczas rozpoczecia sesji do przegladarki wysylane sa naglowki ( automatycznie, tak jakby przegladarka za Ciebie uruchomila headers() ), dlatego by sesja mogla ruszyc musza byc spelnione warunki umozliwiajace wysylanie naglowkow, i znowu klania sie manual -

Cytat
Additionally, session_cache_limiter() and the session.cache_limiter configuration setting can be used to automatically generate the correct caching-related headers when sessions are being used.


warto nieraz na poczatek zajrzec do manuala i sie zwyczajnie doksztalcic
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.12.2025 - 11:49