Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] session_start()
Forum PHP.pl > Forum > Przedszkole
karlkar
Dobra Panowie Wielkie Głowy powiedzta mnie dlaczego ten skrypt wyświetla mi napis "Nie jesteś zalogowany!"?

  1. <?php
  2. if (isset($authorized)) { 
  3. echo "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  7. <title>Marsjańsjki formularz rekrutacyjny</title>
  8. <meta http-equiv="Content-Style-Type" content="text/css">
  9. <link rel="stylesheet" href="Solaris.css" type="text/css">
  10. </head>
  11. <body>
  12.  
  13. <table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
  14. <tr>
  15. <td valign="top" class="maintable">
  16. <table width="100%" border="0" cellspacing="0" cellpadding="0">
  17. <tr>
  18. <td width="50%" valign="top"><a href="http://marsgw.fora.pl" class="nav"><img src="images/forumlogo.jpg" width="253" height="98" border="0" /></a></td>
  19. <td width="50%" valign="top"></td></tr><tr>
  20. <td colspan="2"><img src="images/bg_top_border.jpg" width="750" height="51" /></td>
  21. </tr>
  22. </table>
  23. <table width="100%" border="0" cellpadding="0" cellspacing="0">
  24. <tr>
  25. <td class="tableborder">
  26. <table width="100%" border="0" cellspacing="1">
  27. <tr>
  28. <td colspan="4" class="categorybar">
  29.  
  30. <table border="0" width="100%">
  31. <tr>
  32. <td><img src="images/category_icon.gif"></td>
  33. <td><font class="cattitle">Rekrutacja do MARSa - Głosowanie</font></td>
  34. </tr>
  35. </table>
  36.  
  37. </td>
  38. </tr>
  39. <tr>
  40. <td class="row1">
  41.  
  42. <table border="0" width="100%">";
  43. echo "Działa!";}
  44. else echo "Nie jestes zalogowany! <a href="glosuj.php"> Logowanie </a>";
  45. ?>


Oczywiście jak na tą chwile sprawa wydaje sie wam oczywista - nie ma pliku, który przesyła do tego pliku informacje o sesji, ale plik jest i wszystko działa, gdy w skrypcie przeprowadze małą - wręcz kosmetyczną zmianę. Oto ona(zwróćcie uwage na położenie polecenia session_start()):

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  5. <title>Marsjańsjki formularz rekrutacyjny</title>
  6. <meta http-equiv="Content-Style-Type" content="text/css">
  7. <link rel="stylesheet" href="Solaris.css" type="text/css">
  8. </head>
  9. <body>
  10.  
  11. <table width="750" border="0" cellpadding="0" cellspacing="0" align="center">
  12. <tr>
  13. <td valign="top" class="maintable">
  14. <table width="100%" border="0" cellspacing="0" cellpadding="0">
  15. <tr>
  16. <td width="50%" valign="top"><a href="http://marsgw.fora.pl" class="nav"><img src="images/forumlogo.jpg" width="253" height="98" border="0" /></a></td>
  17. <td width="50%" valign="top"></td></tr><tr>
  18. <td colspan="2"><img src="images/bg_top_border.jpg" width="750" height="51" /></td>
  19. </tr>
  20. </table>
  21. <table width="100%" border="0" cellpadding="0" cellspacing="0">
  22. <tr>
  23. <td class="tableborder">
  24. <table width="100%" border="0" cellspacing="1">
  25. <tr>
  26. <td colspan="4" class="categorybar">
  27.  
  28. <table border="0" width="100%">
  29. <tr>
  30. <td><img src="images/category_icon.gif"></td>
  31. <td><font class="cattitle">Rekrutacja do MARSa - Głosowanie</font></td>
  32. </tr>
  33. </table>
  34.  
  35. </td>
  36. </tr>
  37. <tr>
  38. <td class="row1">
  39.  
  40. <table border="0" width="100%">
  41. <?php
  42. if (isset($authorized)) {
  43. echo "dziala!";}
  44. else echo "Nie jestes zalogowany! <a href="glosuj.php"> Logowanie </a>";
  45. ?>


z kolei przy tym drugim skrypcie wywala mi błąd, że session_start musi być na początku strony, ale poza tym wyświetla tabelkę i tekst Działa. Co tu jest nie tak?
www0_0
  1. <?php
  2. if (isset($authorized)) { 
  3. echo "
  4. ?>


Chy a skąd skrypt ma pobrać wartość $authorized questionmark.gif
nigdzie jej nie zdeklarowałeś.
Jeśli miał to zrobić z sesji to należało by zrobić:
$_session['authorized'];

Co do drugiego kawałka kodu to jest to jak najbardziej prawidłowe zachowanie.
możesz o tym poczytać TU.
alogator
wrzuć jeszcze formularz z logowaniem - skad on w ogóle pobiera dane o logowaniu?
karlkar
Oto formularz
glosuj.html

  1. <HTML>
  2. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  3. <TITLE> User authorization</TITLE>
  4. </HEAD>
  5.  
  6. <BODY>
  7. <H2 align="center"> User authorization </H2>
  8.  
  9. <FORM method="post" action="login2.php" align="center">
  10. <TABLE align="center">
  11.  
  12. <TR>
  13. <TD align=center colspan=2> <B>Logowanie</B> </TD>
  14. </TR>
  15.  
  16. <TR>
  17. <TD>Login:</TD>
  18. <TD><INPUT type="text" name="user_login"></TD>
  19. </TR>
  20.  
  21. <TR>
  22. <TD>Password:</TD>
  23. <TD><INPUT type="password" name="user_pass"></TD>
  24. <TR>
  25.  
  26. <TR>
  27. <TD colspan=2 align="right">
  28. <INPUT type="submit" value="Login"> </TD>
  29. </TR>
  30.  
  31. </TABLE>
  32. </FORM>
  33.  
  34.  
  35. </BODY>
  36.  
  37. </HTML>


A oto plik do którego formularz się odwołuje:
login2.php
  1. <?php
  2. $handle = fopen("user.dat", "r"); 
  3.  
  4. while ($data = fgetcsv ($handle, 1000, ":")) { 
  5. if ( ($data[0] == $user_login) && ($data[1] == $user_pass) ) { 
  6.  
  7.  
  8. session_register("authorized"); 
  9. $authorized = $data[0]; 
  10. header("location: login.php"); 
  11. } 
  12. } 
  13. fclose ($handle); 
  14.  
  15.  
  16. if ($num !=0) { 
  17.  
  18. session_register("authorized"); 
  19. $authorized = $login_m; 
  20. header("location: login.php"); 
  21.  
  22. }
  23.  
  24. if ($op == "logout") { 
  25. echo "Jestes wylogowany. 
  26. Jezeli chcesz zalogowac sie powtórnie 
  27. <A href="glosuj.php">kliknij tutaj</A>"; 
  28. }
  29. ?>
alogator
U mnie ten kodzik działa bez problemu. Tylko jakieś niedociągniecia widze.

Spróbuj użyć tego - podobne działanie

  1. <?php
  2.  
  3. function getLoginInfo() {
  4.  
  5. if (isset($_SERVER['HTTP_AUTHORIZATION']))
  6. return explode(':', base64_decode(substr(
  7. $_SERVER['HTTP_AUTHORIZATION'], 6)));
  8. if (isset($_SERVER['PHP_AUTH_USER']))
  9. return array($_SERVER['PHP_AUTH_USER'],
  10. $_SERVER['PHP_AUTH_PW']);
  11. return false;
  12. }
  13.  
  14. file_exists('user.dat') or
  15. die('Brak pliku danych uzytkownikow');
  16.  
  17. $auth = false;
  18. if (($loginInfo = getLoginInfo()) !== false) {
  19. $hFile = fopen('user.dat', 'r');
  20. while (!feof($hFile)) {
  21. $ud = explode(':', fgets($hFile, 1024));
  22. if ($ud[0] == $loginInfo[0] && rtrim($ud[1]) ==
  23. $loginInfo[1]) {
  24. $auth = true;
  25. break;
  26. }
  27. }
  28. fclose($hFile);
  29. }
  30.  
  31. if (!$auth) {
  32. // Brak autoryzacji
  33. header('WWW-Authenticate: Basic realm="Admin"');
  34. header('HTTP/1.0 401 Unauthorized');
  35. echo '<center>Brak uprawnień do przeglądania strony<br><a href="index.php">STRONA GŁÓWNA</a>';
  36. die;
  37. }
  38.  
  39. // Dane dla zalogowanych użytkowników plik który otworzy sie po poprawnym zalogowa
    niu
  40.  include('admin.php');
  41.  
  42. ?>


oczwyscie musisz posiadać utowrzony plik user.dat w którym będa przechowywane hasło i login w postaci np ADMIN : ADMIN
karlkar
miałęm ten kodzik który teraz podałeś alogator, ale serwer na którym stawiam tą stronke nie obsługuje
header('WWW-Authenticate: Basic realm="Admin"');
header('HTTP/1.0 401 Unauthorized');

(tak mi tłumaczył gościu z pomocy technicznej serwera. Więc muszę mieć coś takiego. U mnie - na moim apachu też skrypt śmiga jak należy... To może chociaż wiecie jak wyłączyć reportowanie tego błędu?

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
alogator
a zobacz czy jak wyrzucisz z html'a cały <head aż do </head> czy ci pójdzie?
www0_0
Cytat(karlkar @ 8.05.2007, 16:11:05 ) *
miałęm ten kodzik który teraz podałeś alogator, ale serwer na którym stawiam tą stronke nie obsługuje
header('WWW-Authenticate: Basic realm="Admin"');
header('HTTP/1.0 401 Unauthorized');

(tak mi tłumaczył gościu z pomocy technicznej serwera. Więc muszę mieć coś takiego. U mnie - na moim apachu też skrypt śmiga jak należy... To może chociaż wiecie jak wyłączyć reportowanie tego błędu?

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent


Przecież podałem ci informacje na temat gdzie szukać rozwiązania.
Cannot send session cache limiter - headers already sent

Musisz wiedzieć o tym że nagłówek do strony trzeba wysłać jako pierwszy czyli zanim wyślesz jakie kolwiek echo, lub dowolny kod HTML lub nawet jedną spacje przed znakiem rozpoczynającym PHP w celu rozwiązania tego stosuje się środki wymienione w linku jaki ci podałem, poczytaj.
karlkar
Cytat(www0_0 @ 8.05.2007, 16:42:56 ) *
Przecież podałem ci informacje na temat gdzie szukać rozwiązania.
Cannot send session cache limiter - headers already sent

Musisz wiedzieć o tym że nagłówek do strony trzeba wysłać jako pierwszy czyli zanim wyślesz jakie kolwiek echo, lub dowolny kod HTML lub nawet jedną spacje przed znakiem rozpoczynającym PHP w celu rozwiązania tego stosuje się środki wymienione w linku jaki ci podałem, poczytaj.



a ja powiedziałem że jak mam to :

<?php
session_start();
if (isset($authorized)) {

na początku to mi za każdym razem wywala że użytkownik jest niezalogowany ;p a jak session_start jest głębiej w kodzie to wywala mi error
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
ale wyświetla to co jest dla zalogowanych ;p
www0_0
A chociaż spróbowałeś użyć ob_start" title="Zobacz w manualu PHP" target="_manual zamiast session_start" title="Zobacz w manualu PHP" target="_manual na początku pliku?
karlkar
nie próbowałem - ale to rozwiązuje probkem winksmiley.jpg Dzięki winksmiley.jpg
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.