Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Dlaczego logownie nie działa pod linuksem?
bartek12421
post 12.01.2009, 14:15:18
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
Pilsener
post 12.01.2009, 14:20:35
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 12.01.2009, 14:32:40
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 12.01.2009, 16:50:02
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?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bartek12421
post 19.01.2009, 14:03:45
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 19.01.2009, 17:28:35
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. 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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bartek12421
post 20.01.2009, 21:31:50
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 20.01.2009, 22:33:46
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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bartek12421
post 21.01.2009, 14:33:36
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 21.01.2009, 16:20:16
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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bartek12421
post 22.01.2009, 07:03:57
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 22.01.2009, 18:29:18
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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bartek12421
post 23.01.2009, 18:24:01
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 23.01.2009, 23:13:00
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)?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bartek12421
post 24.01.2009, 09:23:06
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 24.01.2009, 10:00:14
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ą 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.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
erix
post 24.01.2009, 13:42:25
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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bartek12421
post 24.01.2009, 16:39:56
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 04:35