Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Dlaczego logownie nie działa pod linuksem?
bartek12421
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


Witam.
Napisałem sobie skrypt logowania, który ma się następująco:
  1. <?php
  2. function login($login, $passwd)
  3. {
  4. mysql_connect("localhost","root","");
  5. mysql_select_db("panel");
  6. $zapytanie = 'SELECT login,haslo FROM `uzytkownicy` LIMIT 0, 30 ';
  7. $wykonaj = mysql_query($zapytanie);
  8. $dane = mysql_fetch_array($wykonaj);
  9.  
  10. $login = isset($_SESSION['login']) ? $_SESSION['login'] : mysql_escape_string($_POST['login']);  //filtracja zmiennej
  11. $haslo = mysql_escape_string(md5($_POST['passwd'])); //filtracja + haszowanie hasla
  12. if($login ==''.$dane['login'].'' && $haslo ==''.$dane['haslo'].'')
  13. {
  14.    
  15.     $_SESSION["USER_AUTH"]  = True;
  16.     $_SESSION["USER_LOGIN"] = $_POST["login"];
  17.     return True;
  18.  
  19.  setcookie("log" , "log", time()+3600, "/","", 0);
  20.  header("Location: ?a=");
  21.  
  22. } else {
  23. header("Location: ?a=info_bad_log");
  24. }
  25. }
  26. ?>

Testowałem to na następującej konfiguracji:
Windows XP Professional
Apache 2
PHP 5.2.5
Wszystko działało jak należy.
Rozczarowałem się, gdy wgrałem to na właściwy serwer, gdyż tam logowanie wcale nie chce działać.
Kliknięcie buttona "zaloguj" nie powoduje ani wyświetlenia strony ?a=info_bad_log, ani zalogowania.
Konfiguracja serwera to
Linux Debian
Apache 2 oraz Lighttpd
PHP 5.2.0-8+etch13 (PHP5-CGI)


Co może być powodem tego, że skrypt nie działa na debianowym serwerze?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Przyczyna pewnie nie leży w tej funkcji - daj error_reporting na ALL i sprawdź, czy się wyświetlają jakieś błędy. I daj kod całego pliku, bo nie wiem, czy np. na początku dałeś session_start etc. I zakładam też, że login i hasło do bazy zmieniłeś? Może być wiele przyczyn, dlaczego działa tu a nie tam - musisz przenalizować krok po kroku, czy funckja w ogóle się wywołuje, a jeśli tak, to w którym momencie przerywa działanie.
Go to the top of the page
+Quote Post
bartek12421
post
Post #3





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


Cały kod ma się tak:
logowanie_formularz.php
  1. <form action="index.php" method="post"><input type="hidden" name="page" value="login">
  2. <input type="hidden" name="<?=SESSION_NAME()?>" value="<?=SESSION_ID()?>">
  3. Login<br><input type="text" name="login" value="<?=$_POST["login"]?>"><br>
  4. Hasło<br><input type="password" name="passwd" value=""><br>
  5. <input type="submit" name="submit" value="Loguj"></form>

index.php
  1. <?
  2. include "session.php";
  3. include "admin/config.php";
  4. mysql_connect("localhost","root","");
  5. mysql_select_db("panel");
  6. ?>
  7. <html>
  8. <head>
  9. <link rel="stylesheet" type="text/css" href="style.css">
  10. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  11. <META NAME="Language" CONTENT="pl">
  12. <META name="description" content="<? echo $opis; ?>">
  13. <META name="keywords" content="<? echo $slowa; ?>">
  14. <title><? echo $tytul; ?></title>
  15. </head>
  16. <body>
  17. <table class="glowna" width="<? echo $szerokosc_panelu; ?>">
  18. <tr><td width="<? echo $szerokosc_menu; ?>" valign="top">
  19. <?
  20. include "menu.php";
  21. ?>
  22. </td>
  23. <td valign=top>
  24. <?
  25. if($a=="") $a="wiadomosci";
  26. if(!file_exists("pages/".$a.".php"))
  27.    {
  28.    include "default.php";
  29.    }
  30.    else
  31.    {
  32.    include_once "pages/".$a.".php";
  33.    }
  34.    ?>
  35. </td></tr>
  36. </table>
  37. </body>
  38. </html>

sesion.php
  1. <?
  2. include "funkcje.php";
  3. switch ($page)
  4. {
  5.  case "login"  :
  6.                  $login  = htmlentities(substr($_POST["login"], 0, 255));
  7.                  $passwd = htmlentities(substr($_POST["passwd"], 0, 255));
  8.                  login($login, md5($passwd));
  9.                  break;
  10. }
  11. switch ($a)
  12. {
  13.  case "logout" : logout();
  14.                  break;
  15. }
  16. ?>

funkcje.php
  1. <?
  2. define("SESID", SESSION_NAME() . "=" . SESSION_ID());
  3. function login($login, $passwd)
  4. {
  5. mysql_connect("localhost","root","");
  6. mysql_select_db("panel");
  7. $zapytanie = 'SELECT login,haslo FROM `uzytkownicy` LIMIT 0, 30 ';
  8. $wykonaj = mysql_query($zapytanie);
  9. $dane = mysql_fetch_array($wykonaj);
  10.  
  11. $login = isset($_SESSION['login']) ? $_SESSION['login'] : mysql_escape_string($_POST['login']);  //filtracja zmiennej
  12. $haslo = mysql_escape_string(md5($_POST['passwd'])); //filtracja + haszowanie hasla
  13. if($login ==''.$dane['login'].'' && $haslo ==''.$dane['haslo'].'')
  14. {
  15.    
  16.    //$_SESSION['admin']='ok';  //sesja przyjmuje wartosc 'ok' gdy dane z formularza zgadzaja sie z danymi z bazy
  17.    //$_SESSION['login']=''.$dane['login'].'';
  18.      $_SESSION["USER_AUTH"]  = True;
  19.      $_SESSION["USER_LOGIN"] = $_POST["login"];
  20.      return True;
  21.  
  22.  setcookie("log" , "log", time()+3600, "/","", 0);  //tworzymy ciastko
  23.  header("Location: ?a="); //przenosimy na strone
  24.  
  25. } else {
  26. header("Location: ?a=info_bad_log"); //przenosimy na strone
  27. }
  28. }
  29. function logout()
  30. {
  31.  $_SESSION["USER_AUTH"]  = False;
  32.  $_SESSION["USER_LOGIN"] = Null;
  33. }
  34. function auth()
  35. {
  36.  return ($_SESSION["USER_AUTH"] == True);
  37. }
  38.  
  39. ?>

Dane do bazy są poprawne.
Raportowanie błędów dało taki rezultat:
Kod
[b]Notice[/b]:  Undefined index:  USER_AUTH in [b]/var/www/panel/funkcje.php[/b] on line [b]40[/b]
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A masz cokolwiek w tablicy $_SESSION? Nie zmienił Ci się przez przypadek identyfikator sesji?
Go to the top of the page
+Quote Post
bartek12421
post
Post #5





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


Jak pokazuje phpinfo() to ja nawet tablicy SESSION tutaj nie mam: http://91.205.75.61/www/php.php
Podam jeszcze konfig PHP, może w nim coś nie tak:
Kod
[Session]
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /tmp
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.save_path = "/tmp"
session.hash_bits_per_character = 4
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




To nie ma być pod tym URL, co podałeś, tylko w Twoim skrypcie. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Daj w którymś miejscu var_dump" title="Zobacz w manualu PHP" target="_manual z tablicą sesyjną i sprawdź, czy tam cokolwiek jest.
Go to the top of the page
+Quote Post
bartek12421
post
Post #7





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


  1. <?php
  2. var_dump($_SESSION);
  3. ?>

array(0) { }

Ten post edytował bartek12421 20.01.2009, 21:33:23
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Czyli problem wynika z tego, że nie jest prawidłowo przekazywany identyfikator sesji.

Spróbuj to wywalić:
  1. <input type="hidden" name="<?=SESSION_NAME()?>" value="<?=SESSION_ID()?>">

Z tego, co pamiętam, to PHP automatycznie dopisuje identyfikator do action formularza.
Go to the top of the page
+Quote Post
bartek12421
post
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


Usunięcie tego nic nie zmieniło.
Dlaczego tu nie pojawia się nawet komunikat o złym loginie/haśle?
Po kliknięciu "zaloguj" pomimo tego że formularzu jest
  1. <input type="hidden" name="page" value="login">
wyrzuca mnie na index.php
login.php jest taki:
  1. <?
  2. if(!auth())
  3. {
  4.  print "<p class=error align=center>Podano nieprawidłowy login lub hasło!</p>";
  5. }
  6. else
  7. {
  8. include "wiadomosci.php";
  9. }
  10. ?>


Spróbowałem jeszcze sprawdzić co jest w tablicy sesyjnej na Windowsie.
Na linuxie nie było nic.
Na windzie nawet bez zalogowania jest
Kod
array(2) { ["USER_AUTH"]=>  &bool(false) ["USER_LOGIN"]=>  &NULL }


Ten post edytował bartek12421 21.01.2009, 14:44:38
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Po kliknięciu "zaloguj" pomimo tego że formularzu jest
  1. <input type="hidden" name="page" value="login">

wyrzuca mnie na index.php
login.php jest taki:

Sory, ale troszkę nie kumam: przecież URL, pod który jest wysyłany formularz, to action...

Otwórz sobie menedżer ciasteczek w przeglądarce i sprawdź, czy masz ten sam identyfikator sesji przy każdym żądaniu.
Go to the top of the page
+Quote Post
bartek12421
post
Post #11





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


Za każdym żądaniem jest inny.
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




To już masz winowajcę.

Kod
session.cookie_path = /tmp

Nie pasuje mi ta ścieżka. Daj:
  1. <?php
  2. ?>

zaraz po session_start" title="Zobacz w manualu PHP" target="_manual.
Go to the top of the page
+Quote Post
bartek12421
post
Post #13





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


I to też nic nie daje, pomimo tego, że teraz ID jest taki sam.

Ten post edytował bartek12421 23.01.2009, 18:27:28
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A var_dump" title="Zobacz w manualu PHP" target="_manual($_SESSION)?
Go to the top of the page
+Quote Post
bartek12421
post
Post #15





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


Tak jak pisałem wyżej - cały czasz jest to pusta tablica.
Go to the top of the page
+Quote Post
Zyx
post
Post #16





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Jeśli kliknięcie "Zaloguj" nic nie powoduje, zostawiłbym raczej ciastka w spokoju i przyjrzał się kodowi/serwerowi. Będzie to trochę uciążliwe, ale możesz faszerować kolejne kawałki kodu poleceniem die('foo'); - dopóki się wyświetla, oznacza to, że wykonanie skryptu tam dociera. Gdy przestanie, znaczy, że w ostatnim kawałku jest coś nie tak. FastCGI i Lighttpd tak czasem ma, że czasem z powodu błędów wykonania uwali się proces obsługujący skrypt i wtedy są takie kwiatki. Sam mam to u siebie na lokalnym komputerze i wiem, jakie jaja się czasem dzieją (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Ponadto miałem też w sumie podobny problem pierwszego stycznia. Próbowałem się zalogować do właśnie pisanego skryptu, a tu zupełnie nic nie wchodzi - objawy były podobne do tych, jakie Ty masz. Ale co ciekawe, gdy użyłem innej przeglądarki (Konqueror zamiast Opery), tam wszystko chodziło. Następnego dnia skrypt magicznie naprawił się sam.
Go to the top of the page
+Quote Post
erix
post
Post #17





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Tak jak pisałem wyżej - cały czasz jest to pusta tablica.

Sprawdź, na wszelki wypadek, czy serwer ma uprawnienia do zapisu w katalogu z danymi sesyjnymi.
Go to the top of the page
+Quote Post
bartek12421
post
Post #18





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

Ostrzeżenie: (10%)
X----


Ma i nawet zapisuje sobie tutaj dane z innych skryptów.

Nie mam zamiaru się z tym męczyć, wykorzystałem znalezionego w Internecie gotowca.
Dzięki za pomoc

Ten post edytował bartek12421 24.01.2009, 17:21:28
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: 23.12.2025 - 21:41