Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Headers o co chodzi?!
Forum PHP.pl > Forum > Przedszkole
exman
Witam!
Mam problem dotyczący nagłówków i sesji. Otórz zrobilem system logowania którego kod jest podany poniżej:
  1. <?
  2. header ("Expires: Thu, 17 May 2001 10:17:17 GMT");
  3. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  4. header ("Cache-Control: no-cache, must-revalidate");
  5. header ("Pragma: no-cache");
  6.  
  7.  
  8. if (!isset($_SESSION['SESSION'])) require ( "session_init.php");
  9.  
  10. if(isset($_SESSION['LOGGEDIN'])){
  11. if($_SESSION['LOGGEDIN'] != TRUE){
  12. header("Location: login.php");
  13.   exit;
  14. }
  15. }
  16. ?>
  17. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  18. <html xmlns="http://www.w3.org/1999/xhtml">
  19.  
  20. <head>
  21.   <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  22.   <meta name="generator" content="Adobe GoLive" />
  23.   <title>Admin Login</title>
  24.   <link href="admin.css" rel="stylesheet" type="text/css" media="all" />
  25. </head>
  26.  
  27. <body bgcolor="#ffffff">
  28. <?
  29.  
  30. require_once 'functions.php';
  31. if (!isset($_SESSION['SESSION'])) require ( "session_init.php");
  32. // echo "<B>".$_SESSION['LOGGEDIN']."</b>";
  33. if($_SESSION['LOGGEDIN'] == TRUE){
  34.   header("Location: index.php");
  35.   exit;
  36. }
  37. if($_POST[user] && $_POST[pass]){
  38.   $user=$_POST[user];
  39.   $pass=$_POST[pass];
  40.   
  41.   $sql = "SELECT * FROM users WHERE USR_name = '$user' AND USR_passwd = PASSWORD('$pass') ";
  42.   $wynik = query($sql);
  43.   
  44.   if(mysql_num_rows($wynik)==1){
  45.     $_SESSION['LOGGEDIN'] = TRUE;
  46.     $_SESSION['USERNAME'] = $user;
  47.     @header("Location: index.php");
  48.     exit;
  49.   }
  50.   else fail("Podano niewłaściwe dane!");
  51. }
  52. else fail("Proszę podać nazwę użytkownika i hasło.");
  53.  
  54. ?>
  55. <form method="POST" action="login.php" style="margin-top:50px">
  56.     <table width="324" border="0" cellspacing="3" cellpadding="0" align="center">
  57.      <tr>
  58.       <td width="152">
  59. Nazwa użytkownika:</td>
  60.       <td><input type="text" size="20" name="user" /></td>
  61.      </tr>
  62.      <tr>
  63.       <td width="152">
  64. Hasło:</td>
  65.       <td><input type="password" name="pass" size="20" /></td>
  66.      </tr>
  67.     </table>
  68.      <br>
  69.     <br>
  70. <center><input type="submit" value="zaloguj"/></center>
  71.  
  72. </body>
  73.  
  74. </html>


poprawiam
---
nospor


Gdy to wszystko testowalem lokalnie działało bezproblemowo. Po wrzuceniu tego na serwer zaczelo szales nieziemsko wywalająć mi masębłędów
Cytat
Cannot modify header information - headers already sent by (...)
session_start(): Cannot send session cookie - headers already sent by (...) (

Próbowałem już rzeczy typu ob_start() - ob_flush(), usówanie pustych znaków etc, nie wiem ale jakośnic nie chce działa. Prosze o pomoc jest to BARDZ ważne.
Z góry diękuję.
Guest
zdaje mi się, że nagłówek musi być wysyłany tylko na początku winksmiley.jpg. Też tak mam i się nie przejmuję tym tongue.gif.
exman
Też bym się nie przejmował, ale przeszkadza to (nie wiem czemu) w dalszej pracy skrypu nie przechodzi do panelu administracyjnego tylko wyświetla pustą strone :/
Radarek
Cytat
Cannot modify header information - headers already sent by (...)
session_start(): Cannot send session cookie - headers already sent by (...) (


Uciales najwazniejsze informacje w (...). Tam masz informacje, w ktorej lini, w jakim pliku zostalo rozpoczete wysylanie tresci strony.
.:dR@kE:.
Jeśli chodzi o wysłanie nagłówków, to po prostu użyj output buffering, czyli wpisz tak:
  1. <?php // początek skryptu
  2. /*.
  3. .
  4. .
  5. tutaj cała treść strony
  6. .
  7. .
  8. .*/
  9. ob_end_flush(); // koniec całej strony
  10. ?>
bigZbig
Robisz przekierowanie
  1. <?php
  2. header("Location: login.php");
  3. ?>

a tymczasem ustawiles juz naglowki
  1. <?php
  2. header ("Expires: Thu, 17 May 2001 10:17:17 GMT");
  3. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  4. header ("Cache-Control: no-cache, must-revalidate");
  5. header ("Pragma: no-cache");
  6. ?>


Tak nie można.
exman
Hmm no dobrze to jak w takim razie przekierowac uzytkownika juz zalogowanego na inna strone questionmark.gif Skoro nagłówki muszą być na samym początku??
bigZbig
Cytat(exman @ 2006-01-25 10:41:28)
Hmm no dobrze to jak w takim razie przekierowac uzytkownika juz zalogowanego na inna strone questionmark.gif Skoro nagłówki muszą być na samym początku??

Nagłówki muszą być na początku tego co wysyłasz do przeglądarki a nie na początku skryptu jako takiego.
Radarek
Cytat(bigZbig @ 2006-01-25 08:13:10)
Robisz przekierowanie
  1. <?php
  2. header("Location: login.php");
  3. ?>

a tymczasem ustawiles juz naglowki
  1. <?php
  2. header ("Expires: Thu, 17 May 2001 10:17:17 GMT");
  3. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  4. header ("Cache-Control: no-cache, must-revalidate");
  5. header ("Pragma: no-cache");
  6. ?>


Tak nie można.

Bzdura.

Przeciez to sa naglowki HTTP, nie ma tutaj ani bajta kodu html.

Sprobuj, jesli nie wierzysz.

  1. <?php
  2. header ("Expires: Thu, 17 May 2001 10:17:17 GMT");
  3. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  4. header ("Cache-Control: no-cache, must-revalidate");
  5. header ("Pragma: no-cache");
  6. header("Location: http://www.onet.pl");
  7. ?>


Jeszcze raz powtorze, autorze tego topicu, wklej caly komnikat jaki dostajesz z "headers alredy sent...". Tam masz podana linijke w ktorej zaczales wysylac tresc do przegladarki, a nastepnie gdzies po niej wywolujesz jeszcze funkcje header. I wyprobuj ta metode z buforowaniem. Wstaw jako pierwsza linijke skryptu:
  1. ?>
Slawx
Nic z tego.

Mam na poczatku skryptu wysylanie sesji;
potem chcę sprawdzić, czy istnieją cookie, jesli nie loguje za pomocą sesji, jesli tak, za pomocą cookie.


I nic z tego!

Cookie nie wysyla, choc powinien, jesli wysle cookie(wyswietla mi "Logowanie za pomocą sesji" zamist logowanie za pomocą cookie!"
Guest
Wrzuciłem ob_start i flush. Teraz natomiast nie wiedziec czemu dostaje komunikat z firefoxa:
Cytat
Nieprawidłowe przekierowanie

Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.

    *  Problem ten może się pojawić w wyniku zablokowania lub odrzucenia ciasteczek.

IE natomiast zachowuje sięjakby w kółko pobierał stronę.
Dla uściślenia podaję raz jeszcze (poprawiony tym razem ) kod:
  1. header ("Expires: Thu, 17 May 2001 10:17:17 GMT");
  2. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  3. header ("Cache-Control: no-cache, must-revalidate");
  4. header ("Pragma: no-cache");
  5.  
  6. if (!isset($_SESSION['SESSION'])) require ( "session_init.php");
  7.  
  8. if(isset($_SESSION['LOGGEDIN'])){
  9. if($_SESSION['LOGGEDIN'] != TRUE){
  10. header("Location: login.php");
  11. }
  12. }
  13. ?>
  14. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  15. <html xmlns="http://www.w3.org/1999/xhtml">
  16.  
  17. ... TAK JAK WYŻEJ (pierwszy post) ...
  18. </html>
  19. <?php ob_end_flush()?>
.:dR@kE:.
Plik, którego kod wkleiłes nie nazywa się chyba session_init.php albo login.php questionmark.gif
exman
To login.php session_init.php to:
  1. <?php
  2. $_SESSION['APP_MX'] = "";
  3. $_SESSION['APP_SERVER'] = "host";
  4. $_SESSION['SITE_EMAIL'] = "emaill";
  5.  
  6. $_SESSION['MYSQL_SERVER1'] = "";
  7. $_SESSION['MYSQL_LOGIN1'] = "";
  8. $_SESSION['MYSQL_PASS1'] = "";
  9. $_SESSION['MYSQL_DB1'] = "d";
  10.  
  11. $_SESSION['LOGGEDIN'] = "";
  12. $_SESSION['USERID'] = 0;
  13. $_SESSION['USERNAME'] = "";
  14.  
  15. $_SESSION['EMAIL'] = "";
  16. $_SESSION['FNAME'] = "";
  17. $_SESSION['LNAME'] = "";
  18.  
  19. $_SESSION['SESSION'] = true;
  20.  
  21. ?>
.:dR@kE:.
Skoro to login.php, to plik kręci sie w kółko!
  1. <?php
  2. if(isset($_SESSION['LOGGEDIN'])){
  3. if($_SESSION['LOGGEDIN'] != TRUE){
  4. header("Location: login.php");
  5. }
  6. ?>
exman
Zgadza sie guitar.gif Poprawione poki co wszystko jest OK. Wielkie dzieki!!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.