Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Problem z podtrzymaniem sesji... chyba...
Forum PHP.pl > Forum > Przedszkole
kopek
www.stagraf.pl/kopek.eu/index.php

Pod tym adresem jest dostępny projekt.

Dla testów:
Login: stefan
Hasło: stefan

Po zalogowaniu wyświetla poprawnie nazwę użytkownika i menu po lewej stronie. Po kliknięciu w "lista użytkowników" powinna pojawić się tabelka z użytkownikami w głównym oknie. Niestety tak się nie dzieje, gdyż jakakolwiek czynność po logowaniu powoduje wylogowanie. Załączam kod z pliku index.php oraz dorzucę kod z innego pliku jeżeli zajdzie taka potrzeba. Proszę zwrócić uwagę, że po najechaniu na guzik "lista użytkowników" podświetla się prawidłowy link ale niestety nie działa.

  1. <?
  2. include ("funkcje.php");    //załącz plik funkcje.php
  3. $akcja=$_GET['akcja'];
  4. if ($akcja=="login")
  5.    {
  6.    include("logusr.php");            //jeżeli wybrana akcja login załącz plik logusr.php
  7.    }
  8. if ($log=="0")
  9.    {
  10.    $login=$_COOKIE['login'];
  11.    setcookie("login",$uzytkownik['login']);
  12.    }
  13. if ($akcja=="wyloguj")        //jeżeli wybrano akcję wyloguj to:
  14.    {
  15.    setcookie("login","");    //wyczyść ciasteczka
  16.    $log="0";                    //ustaw zmienną $log na 0
  17.    $login="";                //wyczyść zmienną $login
  18.    }
  19. ?>
  20. <html>
  21. <head>
  22. <? include("plikstyli.php"); ?>        <!--załącz plik ze stylami-->
  23. </head>
  24.  
  25. <table cellspacing=0 cellpadding=0 width=100% border=2><tr><td>
  26. <table cellspacing=0 cellpadding=0 width=100% border=2><tr><td colspan=2>
  27. <br>
  28. <center><h3>S Y S T E M - Z A R Z Ą D Z A N I A - Z A S O B A M I - L U D Z K I M I</h3></center>
  29. <br>
  30. </td></tr>
  31. <tr><td colspan=2>
  32. </td></tr>
  33. <tr><td valign=top width=20%>
  34. <?
  35. if (($login==""&&$akcja!="login")||$log=="0")
  36.    {    
  37.    include("log_usr.php");
  38.    }
  39. if ($login!="")
  40.    {
  41.    polacz();    //funkcja łączenia z bazą danych
  42.    $query = "SELECT * FROM pracownicy WHERE login=\"$login\"";
  43.    $exec = mysql_query($query);
  44.    
  45.    while($uzytkownik=mysql_fetch_array($exec))
  46.        {
  47.        $imie=$uzytkownik['imie'];
  48.        $nazwisko=$uzytkownik['nazwisko'];
  49.        $log=$uzytkownik['login'];
  50.        }
  51.    rozlacz();    //funkcja rozłączenia z bazą danych
  52.    echo"<center><br><br>Zalogowany użytkownik:<br>$imie $nazwisko<br>(<b>$log</b>)<br><br><table><tr><td id=inputreg><a href=\"index.php?akcja=wyloguj\">W Y L O G U J</a></td></tr></table></center><br>";
  53.    }
  54. include("menu.php");    //załącz plik menu.php
  55. ?>
  56. </td>
  57. <td>
  58. <?
  59. if ($blad)
  60.    echo"<center><b>Wystąpił błąd podczas logowania.</b><br><br> Sprawdź czy wprowadzone przez Ciebie dane są prawidłowe, oraz czy masz odpowiednie prawa do zalogowania się do systemu.</center><br><br>";
  61. if ($blad_)
  62.    echo"<center>Użytkownik ma ustawioną opcję <b>URLOP</b> (brak możliwości zalogowania).<br><br></center>";
  63. if ($blad__)
  64.    echo"<center>Użytkownik ma ustawioną opcję <b>L4</b> (brak możliwości zalogowania).<br><br></center>";
  65. if ($login!="")
  66.    {    //sekcja załączania plików w zależności od wybranej akcji
  67.    if ($akcja=="show_usr") include("show_usr.php");
  68.    if ($akcja=="showusr") include("showusr.php");
  69.    if ($akcja=="add_usr") include("add_usr.php");
  70.    if ($akcja=="addusr") include("addusr.php");
  71.    if ($akcja=="del_usr") include("del_usr.php");
  72.    if ($akcja=="delusr") include("delusr.php");
  73.    if ($akcja=="edit_usr") include("edit_usr.php");
  74.    if ($akcja=="editusr") include("editusr.php");
  75.    if ($akcja=="cash") include("cash.php");
  76.    if ($akcja=="add_cash") include("add_cash.php");
  77.    if ($akcja=="addcash") include("addcash.php");
  78.    if ($akcja=="edit_cash") include("edit_cash.php");
  79.    if ($akcja=="editcash") include("editcash.php");
  80.    if ($akcja=="show_cash") include("show_cash.php");
  81.    if ($akcja=="worktime") include("worktime.php");
  82.    if ($akcja=="add_worktime") include("add_worktime.php");
  83.    if ($akcja=="edit_worktime") include("edit_worktime.php");
  84.    if ($akcja=="show_worktime") include("show_worktime.php");
  85.  
  86.    //if ($akcja=="") include(".php");
  87.  
  88.    }
  89.    else
  90.        {
  91.        echo"<center>Musisz być <b> zalogowany</b> aby korzystać z systemu.";
  92.        }
  93. ?>
  94. </td></tr>
  95. </table>
  96. </body>
  97. </html>
Fifi209
Albo sesja albo ciasteczka...zdecyduj się.

Dodaj znacznik meta informujący o kodowaniu strony bo nie masz polskich znaków.

To coś:
  1. <?php
  2. if ($akcja=="show_usr") include("show_usr.php");
  3.   if ($akcja=="showusr") include("showusr.php");
  4.   if ($akcja=="add_usr") include("add_usr.php");
  5.   if ($akcja=="addusr") include("addusr.php");
  6.   if ($akcja=="del_usr") include("del_usr.php");
  7.   if ($akcja=="delusr") include("delusr.php");
  8.   if ($akcja=="edit_usr") include("edit_usr.php");
  9.   if ($akcja=="editusr") include("editusr.php");
  10.   if ($akcja=="cash") include("cash.php");
  11.   if ($akcja=="add_cash") include("add_cash.php");
  12.   if ($akcja=="addcash") include("addcash.php");
  13.   if ($akcja=="edit_cash") include("edit_cash.php");
  14.   if ($akcja=="editcash") include("editcash.php");
  15.   if ($akcja=="show_cash") include("show_cash.php");
  16.   if ($akcja=="worktime") include("worktime.php");
  17.   if ($akcja=="add_worktime") include("add_worktime.php");
  18.   if ($akcja=="edit_worktime") include("edit_worktime.php");
  19.   if ($akcja=="show_worktime") include("show_worktime.php");
  20. ?>


Zastąp switch'em.
jarrod
czegoś nie rozumiem:
  1. <?php
  2. $login=$_COOKIE['login'];
  3.   setcookie("login",$uzytkownik['login']);
  4. ?>

pobierasz dane z cookie, które dopiero wystawisz?
Poza tym dane z cookie odczytasz dopiero po przeładowaniu strony więc wygląda na to, że $login == null
Andaramuxo
Gdy ktoś się zaloguje dodaj sesję, np tak
Kod
$_SESSION['login']=$login
a później sprawdzaj czy istnieje, jak tak, to znaczy, że jesteś zalogowany.
jarrod
co to jest zmienna $log?
co jest w pliku logusr.php

wystawiasz cookie i jest ono utrzymywane nawet jeśli twierdzi, że nie jestem zalogowany. sesja jest trzymana.
Zatem siadasz na logice...
kopek
To jest plik logusr.php.
Czyli coś takiego wystarczy dodać? Linia 27 i czy wtedy można zrezygnować z linii 25 i 26? Jak mniej więcej dokonać tego sprawdzenia?

  1. <?php
  2. $blad=false;
  3. $blad_=false;
  4. $blad__=false;
  5. $login=$_POST['login'];
  6. $haslo=md5($_POST['haslo']);
  7. polacz();
  8. $log="0";
  9. $query="SELECT haslo FROM pracownicy WHERE login=\"$login\"";
  10. $exec=mysql_query($query);
  11. rozlacz();
  12. $dane=mysql_fetch_array($exec);
  13. if ($dane['haslo']==$haslo)
  14.    {
  15.    polacz();
  16.    $query="SELECT status FROM pracownicy WHERE login=\"$login\"";
  17.    $exec=mysql_query($query);
  18.    rozlacz();
  19.    $dane=mysql_fetch_array($exec);
  20.    if ($dane['status']!="URLOP"&&$dane['status']!="L4")
  21.        {
  22.        setcookie("login",$login);
  23.        $log="1";
  24.        $session_name=session_name();
  25.        $session_id=session_id();
  26.        $_SESSION['login']=$login
  27.        polacz();
  28.        $query="SELECT rules FROM pracownicy WHERE login=\"$login\"";
  29.        $exec=mysql_query($query);
  30.        rozlacz;
  31.        $prawo=mysql_fetch_array($exec);
  32.        }
  33.        else
  34.            {    
  35.            if ($dane['status']=="L4")
  36.                {
  37.                $blad__=true;
  38.                }
  39.                else
  40.                    {
  41.                    $blad_=true;
  42.                    }
  43.            }
  44.    }
  45.    else
  46.        {
  47.        $blad=true;
  48.        }
  49. ?>
jarrod
1. Mam nadzieję, że polacz() i rozlacz() to NIE jest połączenie i rozłączenie z bazą danych.
2. zmiennnych $session_name i $session_id chyba nigdzie nie używasz więc do wywalenia
3. To jest w ogóle nie potrzebne bo nic nie zmienia:
  1. <?php
  2. $login=$_COOKIE['login'];
  3. setcookie("login",$uzytkownik['login']);
  4. ?>

ciacho i tak masz wystawione do końca sesji więc nigdzie nie zniknie (no chyba że usuniesz).
4. podczas mojego testowania ewidentnie zmienna $blad była ustawiona na true


to teraz poproszę o plik log_usr.php bo po przeładowaniu strony to on jest wykonywany ($log == 0)
kopek
Cytat(jarrod @ 6.08.2009, 13:56:02 ) *
1. Mam nadzieję, że polacz() i rozlacz() to NIE jest połączenie i rozłączenie z bazą danych.
2. zmiennnych $session_name i $session_id chyba nigdzie nie używasz więc do wywalenia
3. To jest w ogóle nie potrzebne bo nic nie zmienia:
  1. <?php
  2. $login=$_COOKIE['login'];
  3. setcookie(&#092;"login\",$uzytkownik['login']);
  4. ?>

ciacho i tak masz wystawione do końca sesji więc nigdzie nie zniknie (no chyba że usuniesz).
4. podczas mojego testowania ewidentnie zmienna $blad była ustawiona na true


to teraz poproszę o plik log_usr.php bo po przeładowaniu strony to on jest wykonywany ($log == 0)


1. polacz() i rozlacz() to dokładnie połączenie i rozłączenie z baza
2. ok zmienne wywaliłem
3. jak to usunąłem to w ogóle nie mogę się zalogować
4. hmm... najciekawsze jest to, że wszystko lokalnie działa na kompie tylko na serwerze nie chce

plik log_usr.php

  1. <form action="index.php?akcja=login" method="post" target="_self" enctype="application/x-www-form-urlencoded">
  2. <tr>
  3. <td>Login:</td>
  4. <td>
  5. <input id=inputreg type="text" name="login" size="30" maxlength="16" />
  6. </td>
  7. </tr>
  8. <tr>
  9. <td>Hasło:</td>
  10. <td>
  11. <input id=inputreg type="password" name="haslo" size="30" maxlength="32" />
  12. </td>
  13. </tr>
  14. </table>
  15. <br>
  16. <input id=inputreg type="submit" value="Z A L O G U J" />
  17. </center>
  18. </form>
jarrod
ok, nie działa ci bo mimo wszystko potrzebujesz zmiennej login z
  1. <?php
  2. $login=$_COOKIE['login'];
  3. ?>
. ale ponowne wystawienie tego ciacha jest bez sensu.

czy możesz na kilka chwil pod koniec dokumentu zrobić zrzut dla tablic $_COOKIE i $_SESSION? Zobaczę jak to działa
kopek
coś takiego wstawić na końcu pliku log_usr.php?

  1. <?php
  2. echo $_SESSION['login'];
  3. echo $_COOKIE['login'];
  4. ?>
jarrod
raczej var_dump($_SESSION);
chciałbym tylko zobaczyć jakie dane się tam znajdują
kopek
ok już możesz sprawdzić
jarrod
no dobra, niewiele mi to dało zwłaszcza że umieściłeś to w bloku wyświetlanym tylko kiedy nie jesteś zalogowany.
co to za tablica była?

jak widać nawet po naciśnięciu zaloguj sesja jest trzymana a to oznacza że fizycznie sesji się w ogóle nie pozbywasz
  1. <?php
  2. if ($login!="")
  3. {    //sekcja załączania plików w zależności od wybranej akcji
  4. //...
  5. }
  6. ?>

W tym miejscu $login jest puste. oznacza to, że $login=$_COOKIE['login'] == null albo w ogóle nie jest wykonane.
Widzę, że $_COOKIE['login'] nie jest puste więc cały ten blok się nie wykonuje (pewnie $log!=0).
Musisz to sobie po kolei zdebugować, które warunki są sprawdzane i co się dzieje. jakie wartości mają zmienne i jaki mają wpływ.
Tak zdalnie średnio ci w tym momencie pomogę gdy chodzi po prostu o debugging.
kopek
To były dwie tablice:
1. var_dump($_SESSION);
2. echo $_COOKIE['login'];

Zastanawia mnie tylko czemu wszystko działa lokalnie na komputerze a wywala się dopiero po załadowaniu na serwer? Co konkretnie jest za to odpowiedzialne bo jak tego się nie dowiem to ciężko mi będzie rozwiązać ten problem...

Poczyniłem postępy... tabelka z użytkownikami już się wyświetla... niestety gubi mi gdzieś nadal zalogowanego użytkownika. Proszę może o jakiś łopatologiczny sposób przedstawienia problemu.

Można korzystać z danych z pierwszego posta co by się zalogować i sprawdzić jak to wygląda.
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.